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

Posted

技术标签:

【中文标题】在 PasswordBox 中捕获返回键的最佳方法是啥? (WPF/XAML)【英文标题】: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 中这是如何完成的?任何帮助表示赞赏。

【问题讨论】:

【参考方案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 类似于将事件处理程序添加到密码框,为您设置命令而不是单击处理程序的按钮。但是你有一点,对于一个简单的登录表单来说可能有点过分了。 :)

以上是关于在 PasswordBox 中捕获返回键的最佳方法是啥? (WPF/XAML)的主要内容,如果未能解决你的问题,请参考以下文章

在Python中进行模糊键查找的最佳方法?

在 SwiftUI 中捕获文本字段值而不按返回键 [重复]

在clickhouse中选择分片键的最佳方法是啥?

在现有 Django 应用程序中更改主键的最佳方法是啥?

在任务中捕获异常的最佳方法是啥?

如何在 cassandra 中捕获条件插入的返回值?