单击按钮,我将验证TextBox中的值是否有效:
txtName.GetBindingExpression(TextBox.TextProperty).UpdateSource();
文本框突出显示红色边框,附近有错误提示。
然后我切换到其他标签。回来 - TextBox不再突出显示。 在按钮上单击我再次验证,验证规则正常工作并返回false,但文本框仍未突出显示。
如何再次将TextBox突出显示为无效?
验证规则:
public class TextRequired : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var text = value as string;
return new ValidationResult(!string.IsNullOrEmpty(text), "Please, enter alue");
}
}
答案 0 :(得分:1)
验证错误装饰器(红色矩形)显示在属于TabControl
的某个祖先的装饰器层中。切换标签时,会卸载原始标签的内容,此时,装饰器将从该装饰图层中删除,因为装饰器及其装饰元素不再位于同一个可视树中。但是,当您切换回原始标签时,不会再次添加装饰器。这是WPF验证装配器支持的一个弱点。我不知道这是设计还是监督,但解决方案非常简单。
只需将标签项的内容包装在AdornerDecorator
中即可。这将强制将错误装饰器添加到选项卡中的装饰器层中,即使在卸载选项卡的内容时它也会保留。当你切换回来时,它仍然会在那里。
<TabItem>
<AdornerDecorator>
<!-- tab content -->
</AdornerDecorator>
</TabItem>