2011-01-09 189 views
4

基本上我想創建一個在窗口範圍內有效的鍵盤快捷鍵,而不是隻有當焦點在綁定它的控件中時才啓用。鍵盤快捷鍵的命令路由

更詳細

....

我有具有3所控制的窗口:

  • 工具欄
  • 一個文本框
  • 自定義控件

工具欄上有一個綁定到命令CustomCommands.CmdA的按鈕,並鏈接到鍵盤sh orort Ctrl + T

我的自定義控件可以處理CmdA。當我運行該應用程序,並點擊我的自定義控件CmdA已啓用並正常工作。另外Ctrl + T導致該命令觸發。

但是,當我選擇文本框時,我的自定義命令CmdA被禁用。

我可以通過設置CmdA的按鈕的命令目標來解決這個問題。現在,當我選擇文本框時,CmdA仍處於啓用狀態。

但是鍵盤快捷鍵Ctrl + T什麼都不做。

有沒有簡單的方法來改變鍵盤快捷鍵的範圍?或者我是否需要在下面的某個位置捕捉按鍵,然後計算出它與之相關的命令並自行發送(如果有的話,是否有框架可以在其中執行此操作?)

回答

2

對於您通常只需指定輸入綁定窗口,如:

<Window.InputBindings> 
     <KeyBinding Key="N" Modifiers="Control" Command="New"/> 
     ... 
</Window.InputBindings> 

對於內置的應用程序的命令(這是RoutedCommands),你需要CommandBinding在窗口也是如此。

<Window.CommandBindings> 
     <CommandBinding Command="New" Executed="CommandBinding_Executed" /> 
     ... 
</Window.CommandBindings> 
+0

感謝H.B,但是這會將「new」命令綁定到Window代碼背後的「CommandBinding_Executed」函數中。 但是,用戶控件需要處理它。 這是更多的問題,因爲用戶控件是動態創建的,我不知道它將能夠處理100個左右的自定義命令中的哪一個。 – Sprotty 2011-01-09 22:12:33