2010-09-20 51 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