ErrorTemplate для PasswordBox с AttachedProperty - PullRequest
3 голосов
/ 13 октября 2011

Я знаю, что поле пароля в wpf не может использовать Validation.ErrorTemplate, в любом случае я должен показать пользователю, что что-то не так.

Моя папка пароля имеет такую ​​привязку

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

Можно ли получить такой же стиль, как шаблон ошибки по умолчанию (красная рамка) для этого ящика с паролем, если что-то не так?

Это мой шаблон ошибок, который я использую для других элементов управления

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

Спасибо

1 Ответ

2 голосов
/ 05 июля 2012

Одним из решений было бы поместить фактический 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, ваш шаблон ошибки будет отображаться поверх события PasswordBox, хотя TextBox находится под PasswordBox.

Также обратите внимание, что у меня естьустановите шаблон управления TextBox на null.Поскольку он не должен быть видимым, его не нужно визуализировать.

...