我知道wpf中的密码箱无法使用Validation.ErrorTemplate,无论如何我必须向用户显示,这是错误的。

我的密码箱具有这样的绑定(bind)

 <PasswordBox Name="Password" local:PasswordHelper.Text="{Binding PasswordProp, Mode=TwoWay}" />

如果出了点问题,是否可以使用与此密码箱的默认错误模板(红色边框)相同的样式?

这是我用于其他控件的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>

谢谢

最佳答案

一种解决方案是将一个实际的TextBox放在PasswordBox之下,并将Text属性也绑定(bind)到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的下方,但您的错误模板将在PasswordBox事件的上方显示为

还要注意,我已经将TextBox控制模板设置为null。由于不应该看到它,因此不需要渲染它。

10-08 19:31