【发布时间】:2011-01-09 08:03:26
【问题描述】:
在我的应用程序中,我想让用户自定义键盘快捷键,就像在 Visual Studio 的键盘选项中所做的那样。用户可以聚焦空白文本框,然后键入他想要分配给命令的任何快捷方式。
我最接近的方法是订阅 TextBox.PreviewKeyDown 事件,将其设置为已处理以防止在文本框中实际输入文本。然后我忽略与修饰键关联的 KeyDown 事件(是否有更简洁的方法来确定 Key 是否为修饰键?)。
// Code-behind
private void ShortcutTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
// The text box grabs all input
e.Handled = true;
if (e.Key == Key.LeftCtrl ||
e.Key == Key.RightCtrl ||
e.Key == Key.LeftAlt ||
e.Key == Key.RightAlt ||
e.Key == Key.LeftShift ||
e.Key == Key.RightShift)
return;
string shortcutText = "";
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
shortcutText += "Ctrl+";
if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
shortcutText += "Shift+";
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
shortcutText += "Alt+";
_ShortcutTextBox.Text = shortcutText + e.Key.ToString();
}
以上方法适用于以 Ctrl 和 Ctrl+Shift 开头的任何快捷方式,但不适用于任何 Alt 快捷方式。当我按下包含 Alt 的快捷键时,e.Key 始终设置为 Key.System。
如何记录用户的 Alt 快捷键?有没有更好、更可靠的方法来记录用户的快捷方式?
【问题讨论】:
-
我有一种感觉 WPF 使用 Alt 键来尝试捕获 Alt 键组合以专注于与具有助记快捷方式的标签绑定的控件(例如 _File 菜单的 Alt+F ,或 Alt+O 用于 _OK 按钮)。也许有办法阻止或覆盖它?
标签: wpf keyboard-shortcuts user-input