3

wpf の passwordbox が Validation.ErrorTemplate を使用できないことはわかっていますが、とにかく何かが間違っていることをユーザーに示す必要があります。

私のパスワードボックスには、このようなバインディングがあります

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

ありがとう

4

1 に答える 1

2

1 つの解決策は、actualTextBoxを下に置き、プロパティもPasswordBoxバインドして、ErrorTemplateを与えることです。TextPasswordPropTextBox

<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 のコントロールは装飾レイヤーに配置されるため、エラー テンプレートは PasswordBox イベントの上に表示されますが、TextBox は PasswordBox の下にあります。

また、TextBoxcontroltemplate を に設定したことにも注意してくださいnull。表示されることが想定されていないため、レンダリングする必要はありません。

于 2012-07-05T08:52:41.830 に答える