TextBox第二次没有失效

时间:2014-11-04 15:59:30

标签: c# wpf

单击按钮,我将验证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");
        }
    }

1 个答案:

答案 0 :(得分:1)

验证错误装饰器(红色矩形)显示在属于TabControl的某个祖先的装饰器层中。切换标签时,会卸载原始标签的内容,此时,装饰器将从该装饰图层中删除,因为装饰器及其装饰元素不再位于同一个可视树中。但是,当您切换回原始标签时,不会再次添加装饰器。这是WPF验证装配器支持的一个弱点。我不知道这是设计还是监督,但解决方案非常简单。

只需将标签项的内容包装在AdornerDecorator中即可。这将强制将错误装饰器添加到选项卡中的装饰器层中,即使在卸载选项卡的内容时它也会保留。当你切换回来时,它仍然会在那里。

<TabItem>
  <AdornerDecorator>
    <!-- tab content -->
  </AdornerDecorator>
</TabItem>