在 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)的主要内容,如果未能解决你的问题,请参考以下文章