【问题标题】:Can I use KeyBinding on KeyUp?我可以在 KeyUp 上使用 KeyBinding 吗?
【发布时间】:2012-06-19 10:28:55
【问题描述】:

有没有办法在 XAML 中使用 KeyBinding 并在 OnKeyUp 上执行命令?

如果我想绑定左 ALT 键来执行我自己的菜单访问命令,因为 KeyBinding 在 OnKeyDown 上执行命令,我会得到一些不需要的行为。例如,当使用Alt+Tab 跳出应用程序时,该命令将触发,如果按住该键,该命令将重新触发,直到释放该键。

我知道 ALT 是一个修饰键,有点特殊,但是通过等待 OnKeyUp 可以避免这些问题。

【问题讨论】:

  • 您总是可以忽略常规命令并在需要时自行触发它。只需在必要时调用 CanExecute 和 Execute。
  • 没错,但我仍然希望有一个干净的 XAML 解决方案,而不涉及代码隐藏。不过,前景看起来很黯淡。 :)
  • 部分干净的 XAML 将是附加行为。但是你仍然需要一些代码。

标签: .net wpf 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 之间没有区别。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2014-11-28
  • 2011-06-17
相关资源
最近更新 更多