有没有办法使用KeyBinding
并在XAML中的OnKeyUp上执行命令?我可以在KeyUp上使用KeyBinding吗?
如果我想绑定左ALT键来执行我自己的菜单访问命令,因为KeyBinding在OnKeyDown上执行命令,我得到了一些不需要的行为。例如,当通过Alt+Tab
退出应用程序时,该命令将触发,并且如果该键被按下,则该命令被重新触发,直到该键被释放。
我知道ALT是修饰键,有点特殊情况,但通过等待OnKeyUp可以避免这些问题。
有没有办法使用KeyBinding
并在XAML中的OnKeyUp上执行命令?我可以在KeyUp上使用KeyBinding吗?
如果我想绑定左ALT键来执行我自己的菜单访问命令,因为KeyBinding在OnKeyDown上执行命令,我得到了一些不需要的行为。例如,当通过Alt+Tab
退出应用程序时,该命令将触发,并且如果该键被按下,则该命令被重新触发,直到该键被释放。
我知道ALT是修饰键,有点特殊情况,但通过等待OnKeyUp可以避免这些问题。
我通常使用这种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;
}
我最终这样做了。我认为这是KeyBinding无法在KeyUp上触发的一个主要缺陷。尽管我不得不去e.SystemKey,因为e.Key并没有改变Alt和Alg Gr之间的区别。 :) –
哟执行结合命令你可以随时忽略常规命令,并随时随地发射。只需在必要时调用CanExecute和Execute。 – dowhilefor
没错,但我仍然希望有一个干净的XAML解决方案,而不涉及代码隐藏。虽然前景看起来很黯淡。 :) –
部分清理XAML将是一个附加行为。但是你仍然需要一些代码。 – dowhilefor