3

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

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

我已尝试使用以下代码,但出现错误:

<PasswordBox>
    <i:Interaction.Triggers>
        <EventTrigger EventName="KeyDown">
            <si:InvokeDataCommand Command="{Binding MyCommand}" />
        </EventTrigger>
    </i:Interaction.Triggers>  
</PasswordBox>
4

2 回答 2

5

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

XAML 部分:

<PasswordBox Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" />
<Button Name="someButton" IsEnabled="False" Click="someClickEvent" />

C#部分:

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

请注意,MSDN 说

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

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

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

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

于 2014-03-02T13:57:47.550 回答
3

您可以PasswordChanged通过以下方式使用该事件Interactions

XAML

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

<PasswordBox BorderBrush="#FFB0B1AB"
             Width="100"
             Height="25"
             VerticalAlignment="Bottom">

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="PasswordChanged">
            <i:InvokeCommandAction Command="{Binding PasswordChangedCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</PasswordBox>

RelayCommand

private ICommand _passwordChangedCommand = null;

public ICommand PasswordChangedCommand
{
    get
    {
        if (_passwordChangedCommand == null)
        {
            _passwordChangedCommand = new RelayCommand(param => this.PasswordChanged(), null);
        }

        return _passwordChangedCommand;
    }
}

private void PasswordChanged()
{
    // your logic here
}

Some useful links

PasswordBox in WPF Tutorial

Binding to PasswordBox in WPF (using MVVM)

如何绑定到 MVVM 中的 PasswordBox

于 2014-03-02T14:28:27.917 回答