我可以在 KeyUp 上使用 KeyBinding 吗?
Posted
技术标签:
【中文标题】我可以在 KeyUp 上使用 KeyBinding 吗?【英文标题】:Can I use KeyBinding on KeyUp? 【发布时间】:2012-06-19 10:28:55 【问题描述】:有没有办法在 XAML 中使用 KeyBinding
并在 OnKeyUp 上执行命令?
如果我想绑定左 ALT 键来执行我自己的菜单访问命令,因为 KeyBinding 在 OnKeyDown 上执行命令,我会得到一些不需要的行为。例如,当使用Alt+Tab
跳出应用程序时,该命令将触发,如果按住该键,该命令将重新触发,直到释放该键。
我知道 ALT 是一个修饰键,有点特殊,但是通过等待 OnKeyUp 可以避免这些问题。
【问题讨论】:
您总是可以忽略常规命令并在需要时自行触发它。只需在必要时调用 CanExecute 和 Execute。 没错,但我仍然希望有一个干净的 XAML 解决方案,而不涉及代码隐藏。不过,前景看起来很黯淡。 :) 部分干净的 XAML 将是附加行为。但是你仍然需要一些代码。 【参考方案1】:我通常使用 Attached Command Behavior 将命令连接到事件
在您只想在按下特定组合键时执行命令的特殊情况下,我建议同时连接KeyUp
事件和KeyUp
附加命令。
在常规的KeyUp
事件中,检查你想要的组合键是否被按下,如果没有,将事件标记为Handled
,这样它就不会被命令处理
例如,这将仅在按下 A 键时执行绑定命令
<TextBox acb:CommandBehavior.Command="Binding TestCommand"
acb:CommandBehavior.Event="KeyUp"
KeyUp="TextBox_KeyUp"/>
和
private void TextBox_KeyUp(object sender, KeyEventArgs e)
if (e.Key != Key.A)
e.Handled = true;
【讨论】:
我最终这样做了。我认为 KeyBinding 无法在 KeyUp 上触发是一个重大缺陷。不过,我不得不选择 e.SystemKey,因为 e.Key 在 Alt 和 Alg Gr 之间没有区别。 :)以上是关于我可以在 KeyUp 上使用 KeyBinding 吗?的主要内容,如果未能解决你的问题,请参考以下文章
Wpf UserControl使用 KeyBinding,失效问题
如何在(keyup.enter)上关闭移动键盘 - Angular 6
Ctrl + Shift +零的WPF KeyBinding Guesture不起作用