3

我已经设置了一些验证的 WPF 应用程序中有许多文本框。

加载时,应用程序会反序列化 WPF 窗口控件绑定到的类。

我有一个 ValidationRule (例如)测试文件是否存在。如果我没有设置 ValidatesOnTargetUpdated,那么当我更改(绑定)文本属性时,相应的 TextBox 会验证,我会看到(默认)红色边框出现,并且工具提示 ( {Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}) 显示错误消息。

我希望控件在绑定而不是在 propertychanged 上进行验证,因此我将 ValidatesOnTargetUpdated 设置为 true,并且可以在调试时看到 validationRule 触发。

我的问题是,ValidatesOnTargetUpdated="True"尽管 ValidationRule 触发,但(默认)ValidationTemplate 被忽略。

我可以看到工具提示 - 它显示正确的错误消息,但边框不显示为红色;这似乎被忽略了。

任何想法为什么会发生这种情况?

4

1 回答 1

2

您可能想阅读此论坛帖子。我相信与您的情况有关的部分是:

问题:加载页面时不显示错误模板

这是设计使然,因为可以假设用户在他/她犯任何错误之前不希望看到错误消息,但有时需要此功能。因此,ValidatesOnTargetUpdated 属性是在 ValidationRule 类中引入的;通过将其设置为 true,可以立即看到验证结果。但是,有一个警告:您必须确保在页面初始化后设置 DataContext;这可能是在生成的注释行之后的构造函数中,说明初始化代码应该去那里,或者在 Loaded 事件中。如果您想在 XAML 中设置 DataContext,您可以在此处找到解决此问题的方法: http ://wpfglue.wordpress.com/2009/12/08/navigating-from-object-to-object/

但是,我听说这将在 WPF 4.0 中修复。

编辑:

可以在此处找到更永久的链接。

于 2011-05-09T19:15:13.910 回答