我知道wpf中的密码框无法使用Validation.ErrorTemplate,无论如何我必须向用户显示出错了。
My Passwordbox有这样的绑定
<PasswordBox Name="Password" local:PasswordHelper.Text="{Binding PasswordProp, Mode=TwoWay}" />
如果出现问题,是否可以获得与此密码箱的默认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>
谢谢
答案 0 :(得分:2)
一种解决方案是在TextBox
下放置一个实际的PasswordBox
,并将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的控件将放在adorner图层上,因此虽然TextBox位于PasswordBox下方,但您的错误模板将在上显示事件,而不是PasswordBox事件。
另请注意,我已将TextBox
控件模板设置为null
。由于它不应该是可见的,因此不需要渲染。