【问题标题】:What's the Best Way to Catch the Return Key in a PasswordBox? (WPF/XAML)在 PasswordBox 中捕获返回键的最佳方法是什么? (WPF/XAML)
【发布时间】:2010-11-13 20:33:39
【问题描述】:

在 PasswordBox 中捕获返回键的最佳方法是什么? (WPF/XAML)

我的登录表单上有一个 TextBox 字段和一个 PasswordBox 字段(用于输入用户名和密码)。我还有一个登录按钮,它调用执行登录验证过程的方法。

我需要让 Return 键在 PasswordBox 中做出相同的反应,以便用户可以选择输入他们的用户名和密码,然后只需点击 Return 即可登录。

有谁知道在 WPF 中这是如何完成的?任何帮助表示赞赏。

【问题讨论】:

    标签: wpf xaml .net-3.5 return passwordbox


    【解决方案1】:

    有一个更简单的机制来激活按钮的代码。 WPF Button 类提供了一个名为 IsDefault 的属性。当设置为 true 时,如果在窗口中的某些对象有焦点时按回车,按钮的单击事件代码将自动触发。这种机制就像密码框的魅力一样。

    【讨论】:

    • 谢谢你正是我需要的!
    • 请注意,在 WinRT 中的按钮类上未实现 IsDefault、IsDefaulted 和 IsCancel 属性。令人失望。
    • 问题在于,如果您将按钮的 IsDefault 属性设置为 true,然后在任何文本框(例如,用户名文本框)中按回车键,它仍然会运行...
    • @JPProgramer 我明白你的意思,不过,这是表单上的预期行为。
    【解决方案2】:

    您可以处理 PasswordBox(如果需要,还可以是 TextBox)上的 KeyDown 事件,然后使用以下事件处理程序 --

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key != Key.Return && e.Key != Key.Enter)
            return;
        e.Handled = true;
        HandleEnter();
    }
    

    【讨论】:

    • 这将完美运行,我只是很难找到可用于不同 WPF 控件的事件......谢谢!
    【解决方案3】:

    您可以尝试使用 RoutedCommand。

    您可以在 Button 的 Command 属性上设置它。
    您还可以在登录表单的 InputBindings 中添加 KeyGesture 以绑定 Enter 键以触发您的 RoutedCommand。

    然后在您的登录表单的 CommandBindings 中添加一个 CommandBinding,以将 RoutedCommand 绑定到代码中的 Executed 处理程序,并执行或触发您的登录验证过程。

    【讨论】:

    • 听起来很强大!但这真的是最简单的方法吗?如果是这样 - 我会听微软的,让我告诉你......
    • 视情况而定。这样,您的代码中只有一个处理程序,而不是两个(按钮为 on,密码框为一个)。它更灵活,而且不像听起来那么复杂。只有两个额外的步骤,您只需要做一次,永远:定义 RoutedCommand 和添加 CommandBinding。 KeyGesture 类似于将事件处理程序添加到密码框,为您设置命令而不是单击处理程序的按钮。但是你有一点,对于一个简单的登录表单来说可能有点过分了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2012-10-10
    • 2010-09-10
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多