代码之家  ›  专栏  ›  技术社区  ›  rrhartjr

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

  •  0
  • rrhartjr  · 技术社区  · 14 年前

    我有一个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 Text="{Binding TargetValue, ValidatesOnExceptions=true, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" Style="{DynamicResource TextBoxStyle}" />
    

    我已经尝试将text.binding.validatesOnDataErrors属性添加到Style中,但这不起作用,也不是正确的方法。是否可以创建默认绑定样式?感谢您的建议!

    1 回复  |  直到 14 年前
        1
  •  2
  •   ASanch    14 年前

    不幸的是,无法重写绑定属性的默认值。您可以采用的另一种方法是创建自己的自定义绑定扩展,并将validatesException和validatesOndataerror都设置为true。这样,您可以执行如下操作:

    <TextBox Text="{BindingWithValidation TargetValue}/>
    

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

    推荐文章