【问题标题】:Validation ErrorTemplate not showing on data errors验证错误模板未显示数据错误
【发布时间】:2011-04-10 05:29:24
【问题描述】:

这有点像 WPF 问题!我的验证认为它没有按预期出现

问题

基本上,我在我的视图模型上使用 IDataErrorInfo 来提供有关数据输入错误的反馈。我可以看到它被调用并按预期工作,但是 WPF 永远不会显示绑定控件的验证错误模板!

我已经尝试过使用内置的默认文本框红色边框错误模板、样式错误模板和硬编码模板。这些都不会在数据错误情况下显示。

这是我的 xaml 绑定代码:

<TextBox x:Name="txtCaseNumber"  
Text="{Binding Path=CaseNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/>

奇怪的是,错误进入了 Validation.Errors 集合。以下代码导致我的 IDataErrorInfo 错误消息显示在绑定控件旁边。这让我认为问题出在 xaml 方面,而不是 viewmodel 方面。

<ContentPresenter 
Content="{Binding ElementName=txtCaseNumber, Path=(Validation.Errors).CurrentItem}" />

此外, System.Windows.Controls.Validation.GetHasError(txtCaseNumber) 返回 true。

如果有什么不同,我会在 winforms 中托管 WPF。我在我的代码或样式中找不到任何对 Validation 或 ErrorTemplate 的引用,因此我很确定这不是自己的样式目标。

【问题讨论】:

    标签: wpf xaml adornerlayer


    【解决方案1】:

    破解了。

    ErrorTemplate 附加属性 uses the adorner layer 用于显示有关通过 IDataErrorInfo 报告的数据验证失败的错误模板。 Adorner 层是not always available,适用于所有情况下的所有控件。您的控件或其父级之一需要明确提供一个。

    默认的 Window 控件模板包含一个 AdornerDecorator,它为其子级启用装饰层。这就是为什么我的另一个窗口可以正常显示我的错误模板的原因,因为这个窗口使用了默认的控件模板

    没有显示我的错误模板的窗口使用了为我的窗口提供 ControlTemplate 的样式。这个控制模板没有提供&lt;AdornerDecorator&gt;,因此没有装饰层来显示我的错误模板。

    修复就像用&lt;AdornerDecorator&gt; 包装我的窗口控件模板一样简单。

    【讨论】:

    • 我向您致敬,先生!我在 VS 扩展中有一个 UserControl > Expander > Textbox。但它不会显示 IDataErrorInfo 错误。制作了一个示例 WPF 应用程序来托管 UC - 问题仍然存在(排除了 VS Extn)。制作了另一个虚拟机 - 成功排除了虚拟机。然后我点击了你的帖子——在窗口和 UC 中添加了几个 Loaded 事件处理程序。果然,UC 返回了一个空的 AdornerLayer。用 AdornerDecorator 包装了扩展器内容,它起作用了!让我慢了 2 天。我猜是生活和学习。再次感谢您的坚持和时间为后代记录它!
    • 这只是解决了我的问题,即没有提供 AdornerDecorator 的 Metro 风格窗口。谢谢!
    • 这解决了使用 Modern UI 的 ModernDialog 时同样的问题。如果你用 AdornerDecorator 包装 ModernDialog 的内容,问题就解决了。非常感谢。
    • 同样的问题,虽然我花了一段时间才弄清楚 AdornerDecorator 的正确位置。与 Gishu 不同的是,扩展器内容上的 AdornerDecorator 并不适用。在我的情况下,树类似于 Window > Expander > StackPanel > StackPanel > TextBox 并且 AdornerDecorator 必须在最后一个 StackPanel 周围。
    猜你喜欢
    • 2021-08-26
    • 2017-01-15
    • 2020-07-07
    • 2015-09-14
    • 2011-01-28
    • 2017-05-25
    • 2012-12-14
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多