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

22

如何在PasswordBox中捕获回车键?(WPF/XAML)

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

我需要让密码框中的回车键以相同的方式响应,这样用户就可以选择输入他们的用户名和密码,然后只需按回车键即可登录。

有人知道如何在WPF中实现吗?任何帮助都会被赞赏。

3个回答

62

有一种更简单的机制可以激活按钮的代码。WPF Button 类提供了一个名为 IsDefault 的属性。当设置为 true 时,如果在窗口中某些对象具有焦点时按下回车键,则自动触发按钮的点击事件代码。这种机制对于 passwordbox 功能非常有效。


4
请注意,WinRT 中的按钮类未实现 IsDefault、IsDefaulted 和 IsCancel 属性。令人失望。 - Ted A.
问题在于,如果您将按钮的IsDefault属性设置为true,然后在任何文本框中按回车键(例如用户名文本框),它仍然会运行... - JPProgrammer
@JPProgramer 我明白你的意思,不过这是表单上预期的行为。 - Carlos G.

6
您可以在 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 控件的事件方面遇到了一些麻烦...谢谢! - Giffyguy

1

你可以尝试使用RoutedCommand。

你可以将其设置在按钮的Command属性上。
你还可以在loginform的InputBindings中添加KeyGesture,将Enter键绑定到触发你的RoutedCommand上。

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


听起来很强大!但是现在真的是最简单的方法吗?如果是这样的话 - 我会向微软抱怨的,让我告诉你... - Giffyguy
取决于情况。这样你的代码中只有一个处理程序,而不是两个(一个用于按钮,一个用于密码框)。它更灵活,听起来并不复杂。只需要两个额外的步骤,你只需要做一次:定义RoutedCommand和添加CommandBinding。KeyGesture类似于为密码框添加事件处理程序,对于按钮,你设置一个命令而不是Click处理程序。但你说得对,对于一个简单的登录表单来说,这可能有点过头了。 :) - Bubblewrap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接