2011-10-06 68 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