2012-06-19 201 views
1

有没有办法使用KeyBinding并在XAML中的OnKeyUp上执行命令?我可以在KeyUp上使用KeyBinding吗?

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

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

+0

哟执行结合命令你可以随时忽略常规命令,并随时随地发射。只需在必要时调用CanExecute和Execute。 – dowhilefor

+0

没错,但我仍然希望有一个干净的XAML解决方案,而不涉及代码隐藏。虽然前景看起来很黯淡。 :) –

+1

部分清理XAML将是一个附加行为。但是你仍然需要一些代码。 – dowhilefor

回答

2

我通常使用这种Attached Command Behavior的命令挂接到活动

在你的特殊情况下,你要当按下特定的组合键仅执行命令,我建议挂接两个KeyUp事件附加命令KeyUp

在常规KeyUp事件,检查是否被按下你想要的组合键,如果没有,庆祝活动为Handled所以它不会被命令以及

例如,这将处理仅当键被按下

<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; 
} 
+0

我最终这样做了。我认为这是KeyBinding无法在KeyUp上触发的一个主要缺陷。尽管我不得不去e.SystemKey,因为e.Key并没有改变Alt和Alg Gr之间的区别。 :) –

相关问题