文本框未在 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>
我还有一件我缺吗?
你能试着把你的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 开始,您不能使用 INotifyPropertyChanged
在DependencyProperty
上触发验证。