2011-10-06 86 views
1

我在我的viewmodels上使用IDataErrorInfo,我有一個樣式(下面)的TextBox與錯誤模板,工作正常。我知道,像用「ValidatesOnDataErrors =真」:驗證到一個樣式

<TextBox Text="{Binding Path=LastName, ValidatesOnDataErrors=True}" 
        Style="{StaticResource TextBoxStyle}" /> 

將迫使WPF使用IDataErrorInfo的,但我想知道如何獲取烤到我的風格。

乾杯,
Berryl

<Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}"> 
    ... 

    <!-- 
    Error handling 
    --> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <DockPanel LastChildFill="True"> 
        <TextBlock DockPanel.Dock="Right" Text=" *" 
           Foreground="Red" 
           FontWeight="Bold" FontSize="16" 
           ToolTip="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"/> 
        <Border BorderBrush="Red" BorderThickness="1"> 
         <AdornedElementPlaceholder Name="placeholder"></AdornedElementPlaceholder> 
        </Border> 
       </DockPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="Background" Value="LightYellow"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

回答

3

如果我明白你在問什麼,你希望能夠以你的風格使用ValidatesOnDataError=True,所以你不必每次都重複。

如果是這種情況你不能,因爲這是數據綁定的屬性,而不是風格;你不能模板化數據綁定。

+0

是啊,這就是我的動力。似乎應該有一個難以置信的懶惰的地方的援助, – Berryl

0

你不能因爲這是綁定到你的財產的定義的一部分,而不是如何錯誤可視化。

1

我只是想知道,如果你使用一個標籤,而不是一個文本框,那麼在標籤你也許可以做這樣的事情的風格,

   <ControlTemplate TargetType="sdk:Label"> 
        <TextBlock x:Name="textBlock" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, ValidatesOnDataErrors=True}"> 
+0

好的想法!你有機會嘗試它嗎? – Berryl