2011-10-13 52 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。由於它不應該是可見的,它不需要被渲染。