【问题标题】:TextBox is not invalidated for the second timeTextBox第二次没有失效
【发布时间】:2014-11-04 15:59:30
【问题描述】:

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 2019-06-07
      • 2023-01-15
      • 2013-12-13
      • 1970-01-01
      • 2022-01-21
      • 2010-10-25
      • 2018-01-06
      相关资源
      最近更新 更多