如果用户在 WPF 中键入任何内容,请检查密码框

Jea*_*hhe 3 c# passwords wpf mvvm passwordbox

我正在使用PasswordBox,我想检测用户何时输入任何内容,如果是,我需要将按钮状态更改为启用。如何检查用户是否在 中输入了任何内容PasswordBox

它的行为有所不同,TextBox因为您无法将其绑定到文本,并且当用户键入任何内容时会引发一些事件。任何想法?

我尝试使用下面的代码,但出现错误:

<PasswordBox>
    <i:Interaction.Triggers>
        <EventTrigger EventName="KeyDown">
            <si:InvokeDataCommand Command="{Binding MyCommand}" />
        </EventTrigger>
    </i:Interaction.Triggers>  
</PasswordBox>
Run Code Online (Sandbox Code Playgroud)

mcy*_*mcy 5

您可以使用PasswordChanged密码框中的字符串更改时触发的事件:

XAML 部分:

<PasswordBox Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" />
<Button Name="someButton" IsEnabled="False" Click="someClickEvent" />
Run Code Online (Sandbox Code Playgroud)

C# 部分:

    private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        somebutton.IsEnabled = String.IsNullOrWhiteSpace(pwdBox.Password));
    }
Run Code Online (Sandbox Code Playgroud)

请注意 MSDN 说

当您获取密码属性值时,您将密码以纯文本形式公开在内存中。为了避免这种潜在的安全风险,请使用 SecurePassword 属性以 SecureString 形式获取密码。

因此,以下代码可能是首选:

    private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        btn.IsEnabled = pwdBox.SecurePassword.Length == 0;
    }
Run Code Online (Sandbox Code Playgroud)

如果您只能访问 viewModel,那么您可以使用附加属性来创建可绑定密码或安全密码,如此例所示