WPF验证:样式/模板验证属性

时间:2010-09-20 18:40:43

标签: .net wpf validation styles

我有一个显示许多TextBox输入的WPF屏幕。我有一个处理所有验证的样式:

<Style x:Key="TextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
    <!-- etc etc -->
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <Border Grid.Column="0" BorderBrush="Red" BorderThickness="1">
                    <StackPanel>
                        <AdornedElementPlaceholder />
                    </StackPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" />
        </Trigger>
    </Style.Triggers>
</Style>

我唯一要应用于TextBox的是告诉绑定它是否有效。鉴于我在应用程序中有相当多的这些框,我宁愿不为整个应用程序重复这个广告。

<TextBox Text="{Binding TargetValue, ValidatesOnExceptions=true, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Style="{DynamicResource TextBoxStyle}" />

我尝试将Text.Binding.ValidatesOnDataErrors属性添加到样式中,该样式不起作用,也不是正确的方法。是否可以创建默认绑定样式?任何建议表示赞赏!

1 个答案:

答案 0 :(得分:2)

不幸的是,没有办法覆盖Binding属性的默认值。您可以采用的另一种方法是创建自己的自定义Binding扩展,其中ValidatesOnException和ValidatesOnDataError都设置为true。通过这种方式,您可以执行以下操作:

<TextBox Text="{BindingWithValidation TargetValue}/>

您可以使用提供的基类in this article来更轻松地创建自定义绑定标记扩展。