验证ErrorTemplate未显示数据错误

时间:2010-09-09 11:55:35

标签: wpf xaml adornerlayer

这有点像WPF whodunnit!我的验证太阳镜在预期时没有出现

问题

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

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

继承我的xaml绑定代码:

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

Wierdly,错误进入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的引用,所以我很确定这不是造型自己的目标。

1 个答案:

答案 0 :(得分:44)

破解了。

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

默认的窗口控件模板包含一个AdornerDecorator,可为其子项启用adorner图层。这就是为什么我的其他窗口显示我的错误模板就好了,因为这个窗口使用了默认控件模板

没有显示我的错误模板的窗口使用了为我的窗口提供ControlTemplate的样式。此控件模板未提供<AdornerDecorator>,因此没有显示我的错误模板的装饰图层。

修复就像使用<AdornerDecorator>包装我的窗口控件模板一样简单。

相关问题