2010-09-20 52 views
0

我有一个WPF屏幕,显示一些文本框输入。我有一个处理所有的验证样式: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属性的风格,这不工作,也不看似正确的方式去做。有没有可能创建一个默认的绑定风格?任何建议感激!

回答

2

不幸的是,没有办法覆盖Binding属性的默认值。您可以采取的另一种方法是使用ValidatesOnException和ValidatesOnDataError都设置为true来创建您自己的自定义Binding扩展。通过这种方式,你可以这样做:

<TextBox Text="{BindingWithValidation TargetValue}/> 

您可以使用提供in this article的基类,使之更容易一点创建自定义绑定标记扩展。

+0

我不认为我会去所有的麻烦,但似乎听起来。不要重复自己,不要荒谬。 :) – rrhartjr 2010-09-21 03:05:19

+0

确实。对你有好处。 =) – ASanch 2010-09-21 03:17:19