我们目前正在使用WPF和.Net4.5编写GUI应用程序。
我们的某个网页包含TabControl
,其自定义UserControl
为TabItem
。这些UserControl
只包含一个可编辑的TextBox
es列表。 Textbox
es有一个自定义ValidationRule
,可根据正则表达式验证文本。问题是这些可编辑的文本框绑定到Properties
,它在启动时使用文本文件/数据库中的默认值加载。
我需要在文本框具有焦点之前或编辑之前进行验证,以确保正确输入在文本文件/数据库中输入的值。目前,当我选择一个标签项时,文本框不会显示红色验证错误框,即使验证运行正常。只有在我点击Validation
错误的项目后才能看到相关的红色框。
我正在使用UpdateSourceTrigger="PropertyChanged"
我可以调试并看到验证码在正确的时间运行,但仍然不会显示红色框。每当TabItem
获得焦点时,我甚至添加了代码来重新触发绑定属性上的'Property changed'事件 - 但这仍然无济于事。以下是未显示验证的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>
我还缺少另一件吗?
答案 0 :(得分:1)
您可以尝试将TextBox
放入AdornerDecorator
吗?我需要挖掘出源代码,但我之前看到的问题是Tab控件内的控件无法正确呈现验证。
e.g。
<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
来触发{ {1}}。