问题标签 [wpf-4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
585 浏览

c# - 如何缓存 TreeViewItems 以在重新绑定后重新展开?

我有一个绑定到我无法控制的集合类的 TreeView。在这个类里面是一个对象的集合,每个对象都有自己的项目集合。此层次结构固定为 3 深。TreeView 的子项包含在 ObservableCollection 中,并在 TreeView 中相应地更新。这些对象中的每个对象中的集合都是不可观察的,因此每次将对象添加到其中一个子对象时,我都必须手动将数据重新绑定到 TreeView。这会导致所有展开的子项重置为未展开状态。我正在尝试缓存已扩展的对象,以便在重新绑定后重新扩展它们。孩子们按我的预期工作,但是当我尝试扩展 TreeView 的孙子时,我得到一个空对象。

要获得 TreeViewItem,我使用 ItemsControl 的 ItemContainerGenerator 属性:

二级集合都有对其父对象的引用。所以因为我有很多这样的对象,所以它们被循环了,每个都使用它的父对象来查找它的父对象的 TreeViewItem。它们被添加到集合中的顺序保证(我认为)子级将始终在父级之后处理。因此,我得到了这行丑陋的代码:

此行在尝试从项目 obj 获取容器时总是失败。它成功地获取了父 TreeViewItem,但是在尝试获取 Child 的 TreeViewItem 容器时,我总是收到 null。文档指出 ContainerFromItem() 返回

“与给定项目对应的 System.Windows.UIElement。如果项目不属于项目集合,或者尚未为其生成 System.Windows.UIElement,则返回 null。”

我知道第二级子级存在于父级的项目集合中。我在 VS 2010 中检查了调试器,所有项目都在那里。我花了很多时间在谷歌上寻找答案,遇到有人说容器项目是在后台工作线程上创建的,并且在尝试获取子项目容器时可能不会生成。我尝试等待 ItemContainerGenerator 的 Status 属性等于 GeneratorStatus.ContainersGenerated,但我仍然得到相同的结果。我需要以某种方式为我的第二级孩子获取 TreeViewItem 容器,以便可以像第一级孩子一样重新扩展它们。

0 投票
3 回答
1179 浏览

c# - CodePlex.com 上最好的 WPF4 项目

这几天我正在学习 WPF 和来自微软的名为“Expression Blend 4”的神奇工具。它使我们设计 WPF 和 Silverlight 应用程序的工作比以往任何时候都更容易,特别令我印象深刻的是 SketchFlow 功能,它可以为我们的 WPF 和 Silverlight 应用程序进行快速原型设计。同时能够创建丰富的 Web 体验、游戏、桌面应用程序和更多的。

当我在网上寻找一个伟大的 WPF 项目的示例或示例时,我发现了一些应用程序,例如

但它们无法下载,例如 Devexpress、Infragistics 等 payante 库。

我正在 CodePlex 上寻找 WPF 的第一个示例,不仅要学习 WPF,还要学习全面的企业应用程序开发的良好实践。

我在 StackOverFlow 中搜索了最近的主题,他们在谈论老一代的 WPF,... WPF4 太棒了!

0 投票
1 回答
733 浏览

.net - WPF 网络摄像头组件在 .NET 4.0 下崩溃

我有一个来自Codeplex的 WPF 网络摄像头组件的源代码,我正在尝试将其从 .NET 3.5 移植到 .NET 4.0。

在两个目标下都可以正常编译,但在 .NET 4.0 版本中,在此方法System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception的行中运行带有 a 的应用程序时会崩溃:moniker.BindToObject(bindCtx, null, ref filterId, out filterObject);

知道为什么以及如何解决它吗?

相机是Genius Eye 110,我在 Windows XP SP2 下工作。

0 投票
1 回答
352 浏览

c# - 在 WPF 4 中对非绑定属性进行验证 - 什么方法?

当没有绑定时,应该如何处理 WPF 4 中的验证?我正在阅读的大多数验证文档似乎都是针对具有绑定的控件。

例如,只有一个主窗口,其中包含一些用户将填写的文本框,然后是一个按钮,然后有人会单击它。我猜一个人可以手动完成,但不会有一种 WPF 方法来解决这个问题吗?

(任何短代码示例将不胜感激)

0 投票
1 回答
416 浏览

wpf - 使用 WPF 验证框架在树上冒泡验证的示例是什么?

我正在使用 WPF 阅读基于绑定框架的验证的部分好处是验证事件可能会在树上冒泡。

什么是有用的例子?只是试图理解。

0 投票
3 回答
6289 浏览

wpf - xaml 样式中的 WPF4 DataGridHeaderBorder

提出一个单独的问题,与对WPF 4 答案的评论有关:DataGridColumnHeader 发生了什么?

看来我可以在 UserControl 中使用 DataGridHeaderBorder,在 ResourceDictionary 中独立使用,但不能在样式的模板设置器中使用。

如果我使用 xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit",我可以让它工作,即使我没有在项目中引用 WPFToolkit。我已经验证我设置为 .NET4 并引用 PresentationFramework v4。

感谢您帮助我删除 dg: hack。

0 投票
1 回答
195 浏览

visual-studio-2010 - WPF4:如何在主窗口的 UserControl 中设置值?

这必须很简单,至少在旧的 .Net 中它可能需要四行代码。我在 VS2010、C#、WPF4 中工作。

我有一个带有文本框的用户控件。当我单击主窗口中的按钮时,我希望我的用户控件文本框反映一些文本。这在 WPF4 中是否可以使用少于 500 行深奥的代码?

问题是,虽然我知道文本框正在获取用户控制代码中的断点所证明的新文本,但该文本永远不会反映到主窗口。主窗口仍然显示原始文本。它必须是某种绑定的东西,我真的不认为我应该为这种简单的情况创建模板和资源等等。我在 WPF4 的森林中忘记了一些简单的事情。下面是我所拥有的。点击按钮后,文本框还是空白;它没有说“你好地球人”。

在用户控制代码中:

用户控件 xaml:

(我不知道在这种情况下文本绑定应该做什么。)

主窗口代码:

和主窗口 xaml:

感谢地球人(还有那些设计这个烂摊子的人!)

0 投票
2 回答
6114 浏览

c# - WPF Sentinel 对象以及如何检查内部类型

正如你们中的一些人所发现的那样,WPF 4 出现了一个新功能 (?),其中数据绑定引擎可以将您的自定义控件实例传递给名为“ {DisconnectedItem} ”的类MS.Internal.NamedObject到 DataContext - 而不是您的代码所期望的数据项(当模板化控件被其 ItemsControl 断开连接时会发生这种情况)。这些被称为哨兵对象。

在现有代码中,这可能会导致代码没有为此做好准备的虚假异常。这些可能会被数据绑定子系统吞噬,也可能造成严重破坏。密切关注您的调试控制台。

无论如何,我在这个 MSDN 论坛上了解到了这一点。Sam Bent 的一篇文章解释了这一切。现在去读吧,你会想知道的。本质是这些事件不应该被触发(这就是错误),所以:

如果 DataContext 是哨兵对象,则忽略 DataContextChanged 事件。

所以,所以我想检查我的 DataContext。但是怎么做?考虑:

猜猜会发生什么?它无法编译,因为 MS.Internal.NamedObject 是内部的,我无法访问。当然,我可以像这样破解它:

(或其他有效的东西)。我还按照 Sam 的建议缓存对象以供以后进行引用相等检查(它是单例)。

当然,这意味着我没有问题,不是真的。但是我很好奇,而且这个帖子肯定会让一些用户受益,所以无论如何都值得一问:

有没有一种方法可以准确地检查内部 NamedObject 类型的类型,而无需进行字符串比较?

0 投票
4 回答
2498 浏览

.net - 强制初始化 HwndHost

在我的 WPF 应用程序中,我使用 HwndHost 托管 Win32 内容。但是,创建 HwndHost 不会创建本机窗口。相反,这是在BuildWindowCore()WPF 稍后调用的重写方法中完成的。

我的托管内容需要本机窗口的窗口句柄来进行自己的初始化。不幸的是,我无法强制创建窗口(即让 WPF 调用 BuildWindowCore),所以我有第二个线程轮询 HwndHost,直到它被初始化。

在 .NET 4.0 / WPF 4.0 中,WindowInteropHelper.EnsureHandle()添加了一个新方法。我曾希望这能解决这种情况,但它只适用于 Window,而不是 HwndHost(它不是从 Window 派生的)。你有什么建议我可以做的吗?

编辑:

我忘了为可能的解决方案添加更多约束:

  1. HwndHost 放置在一个控件中,根据用户设置,该控件可以是应用程序主窗口的子窗口,也可以放置在新窗口中(通过第三方停靠管理器)。这意味着在创建窗口期间,我不确定父窗口(以及它的 hWnd)将是什么。
  2. 虽然本机代码在其初始化期间需要 hWnd,但该窗口仅在用户请求显示时才显示(即一开始它是不可见的)。如果可能,应该避免需要显示窗口,然后立即再次隐藏它。
0 投票
1 回答
11413 浏览

wpf - 在“System.Windows.Data.Binding”上提供值引发异常

我正在向文本框添加验证规则(按照Adam Nathan的WPF 4 Unleashed示例)

启动应用程序时,我遇到以下神秘的错误消息

在“System.Windows.Data.Binding”上提供值引发异常

替代文字

错误是什么意思,需要做什么来解决这个问题?

这是完整的源代码

XAML

JpgValidationRule