2012-06-19 47 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之間的區別。 :) –