文本框未在 WPF 中显示红色验证错误

本文关键字:显示 红色 验证 错误 WPF 文本 | 更新日期: 2023-09-27 18:30:56

我们目前正在使用 WPF 和 .净4.5.

我们的一个页面包含一个TabControl,其中自定义UserControl s 为 TabItem s。这些UserControl只包含可编辑TextBox的列表。 Textbox es 有一个自定义ValidationRule,用于根据正则表达式验证文本。问题是这些可编辑的文本框绑定到在启动时使用文本文件/数据库中的默认值加载的Properties

我需要在文本框具有焦点之前或编辑之前进行验证,以确保正确输入在文本文件/数据库中输入的值。目前,当我选择一个选项卡项时,文本框没有显示红色验证错误框,即使它看起来验证正在运行。只有在我单击出现Validation错误的项目后,我才会看到关联的红色框。

我正在使用UpdateSourceTrigger="PropertyChanged",我可以调试并查看验证代码是否在正确的时间运行,但仍然不会显示红色框。我什至添加了代码,以便在TabItem获得焦点时重新触发绑定属性上的"属性已更改"事件 - 但这仍然没有帮助。下面是未显示验证的TextBox之一的示例:

<TextBox x:Name="TextBox1" Margin="10,5,5,5" Width="150" MaxLength="5" Style="{StaticResource ServiceEntryTextBox}">
    <TextBox.Text>
        <Binding Path="TexBox1BoundProperty" Converter="{StaticResource DoubleConverter}" UpdateSourceTrigger="PropertyChanged"  ValidatesOnDataErrors="True" ValidatesOnExceptions="True">
            <Binding.ValidationRules>
                <validation:StringRegexFormatValidation RegexPattern="^[0-9]{0,1}.{0,1}[0-9]{1,3}$" ValidatesOnTargetUpdated="True"/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

还有一件我缺吗?

文本框未在 WPF 中显示红色验证错误

你能试着把你的TextBox放在AdornerDecorator里吗?我需要为此挖掘源代码,但我之前见过 Tab 控件内的控件无法正确呈现验证的问题。

例如

<AdornerDecorator>
    <TextBox x:Name="TextBox1" Margin="10,5,5,5" Width="150" MaxLength="5" Style="{StaticResource ServiceEntryTextBox}">
        <TextBox.Text>
            <Binding Path="TexBox1BoundProperty" Converter="{StaticResource DoubleConverter}" UpdateSourceTrigger="PropertyChanged"  ValidatesOnDataErrors="True" ValidatesOnExceptions="True">
                <Binding.ValidationRules>
                    <validation:StringRegexFormatValidation RegexPattern="^[0-9]{0,1}.{0,1}[0-9]{1,3}$" ValidatesOnTargetUpdated="True"/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</AdornerDecorator>

有关调试的进一步帮助

我也看到了直接绑定到DependencyProperty时的问题。我看到的问题是我提出了INotifyPropertyChanged以触发要处理的验证(在 .NET 4.0 中工作正常),但是从 .NET 4.5 开始,您不能使用 INotifyPropertyChangedDependencyProperty上触发验证。