【问题标题】:Text box not showing Red Validation Error in WPFWPF 中未显示红色验证错误的文本框
【发布时间】:2016-01-19 05:40:06
【问题描述】:

我们目前正在使用 WPF 和 .Net4.5 编写一个 GUI 应用程序。

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

我需要在文本框获得焦点之前或对其进行编辑之前进行验证,以确保在文本文件/数据库中输入的值正确输入。目前,当我选择一个选项卡项时,文本框未显示红色验证错误框,即使验证似乎运行正常。只有在单击带有Validation 错误的项目后,我才会看到相关的红色框。

我正在使用UpdateSourceTrigger="PropertyChanged",我可以调试并看到验证代码在正确的时间运行,但仍然不会显示红色框。我什至添加了代码以在TabItem 获得焦点时重新触发绑定属性上的“属性更改”事件 - 但这仍然无济于事。这是未显示验证的TextBoxes 之一的示例:

<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>

我还缺少另一件作品吗?

【问题讨论】:

标签: c# wpf validation


【解决方案1】:

您可以尝试将您的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 上的验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多