开发者

ErrorTemplate for PasswordBox with AttachedProperty

开发者 https://www.devze.com 2023-04-13 06:32 出处:网络
I know that a passwordbox in wpf could not use the Validation.ErrorTemplate, anyhow i have to show the user, that something is wrong.

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


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号