ErrorTemplate for PasswordBox with AttachedProperty

1.8k Views Asked by At

I know that a passwordbox in wpf could not use the Validation.ErrorTemplate, anyhow i have to show the user, that something is wrong.

My Passwordbox has a binding like this

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

Is it possible to get the same style like the default errortemplate (red border) for this passwordbox, if something is wrong?

This is my ErrorTemplate that I use for the other controls

<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>

Thanks

1

There are 1 best solutions below

0
On

One solution would be to put an actual TextBox underneath the PasswordBox and bind the Text property to PasswordProp too and give the TextBox the 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>

Since the controls of the ErrorTemplate will be put on an adorner layer, your error template will be displayed on top of the PasswordBox event though the TextBox is underneath the PasswordBox.

Also note that I have set the TextBox controltemplate to null. Since it is not supposed to be visible it doesn't need to be rendered.