有沒有辦法使用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