2011-10-13 29 views
3

我知道wpf中的密码框无法使用Validation.ErrorTemplate,无论如何我必须向用户显示出错。用于PasswordBox的ErrorTemplate与AttachedProperty

我Passwordbox有这样

绑定是有可能得到相同的样式像这样passwordbox默认errortemplate(红色边框),如果事情是错?

这是我ErrorTemplate,我使用的其他控件

<Style x:Key="baseControlStyle"> 
    <Setter Property="Control.FontFamily" Value="Verdana" /> 
    <Setter Property="Control.FontSize" Value="12" /> 
    <Setter Property="ToolTipService.ShowOnDisabled" Value="True" /> 

    <Setter Property="Validation.ErrorTemplate" > 
     <Setter.Value> 
      <ControlTemplate> 
       <DockPanel LastChildFill="True"> 
        <Image x:Name="Bild" 
          DockPanel.Dock="Right" 
          Source="../Resources/Nein.ico" 
          Margin="-5 0 0 0" 
          MaxHeight="16" 
          MaxWidth="16" 
          VerticalAlignment="Center" 
          ToolTip="{Binding ElementName=myControl, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
        </Image> 
        <Border BorderBrush="Red" BorderThickness="1" CornerRadius="2"> 
         <AdornedElementPlaceholder x:Name="myControl" /> 
        </Border> 
       </DockPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="Control.ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

感谢

回答

2

一个解决办法是把实际TextBoxPasswordBox下和Text属性绑定到PasswordProp过于并给TextBox ErrorTemplate:

<Grid> 
    <TextBox Template="{x:Null}" Style="{StaticResource baseControlStyle}" Text="{Binding PasswordProp, Mode=TwoWay}" />  
    <PasswordBox Name="Password" local:PasswordHelper.Text="{Binding PasswordProp, Mode=TwoWay}" /> 
</Grid> 

由于ErrorTemplate的控件将放置在装饰器图层上,因此尽管TextBox位于PasswordBox下方,您的错误模板将在的密码框事件之上显示

另请注意,我已将TextBox控制模板设置为null。由于它不应该是可见的,它不需要被渲染。