2011-10-05 177 views
0

我有一個菜單鍵盤快捷鍵和文本框的應用程序。當文本框有焦點時,我希望鍵盤快捷鍵被禁用,但我無法找到一個簡單的方法來做到這一點。我可以處理文本框的PreviewKeyDown事件,但發送KeyDown事件不會導致TextInput事件觸發,所以我必須自己手動觸發TextInput事件,並且必須確保每個文本框都覆蓋PreviewKeyDown事件並創建一個TextInput事件。如何禁止WPF中的菜單鍵盤快捷鍵KeyDown處理?

這是抑制菜單鍵盤快捷方式的唯一方法,當文本框有焦點或有另一種方式不容易出錯?

編輯:

下面是我添加了鍵盤快捷鍵:

var kgc = new NuiWpfCore.Input.UnrestrictedKeyGestureConverter(); // allows gestures without modifier keys 
var result = kgc.ConvertFromString(s) as NuiWpfCore.Input.UnrestrictedKeyGesture; 
m_KeyBinding = new KeyBinding(); 
m_KeyBinding.Command = KeyBindingCommand; 
m_KeyBinding.Modifiers = result.Modifiers; 
m_KeyBinding.Key = result.Key; 
m_Parent.InputBindings.Add(m_KeyBinding); // m_Parent is of type UIElement 

回答

1

你能否提供更多的投入,如您是如何註冊的鍵盤快捷方式?使用KeyBinding?如果是這樣,它已經需要指定Command。因此,在命令的Canexecute中,如果文本框處於焦點狀態,則返回false。

這將禁用鍵盤快捷鍵。來自你身邊的某些源代碼可能會有用。

編輯

所以,現在你用KeyBindingCommand它看起來像一個RoutedCommand我有KeyBinding。如果是這樣的命令綁定具有CanExecute函數。

m_Parent.CommandBindings.Add(new CommandBinding(KeyBindingCommand, OnExecuted, CanExcute)); 

CanExecute處理機.... CanExecutedRoutedArgs可以/不可以正確...

private void CanExecute(object sender, CanExecutedRoutedArgs args) 
    { 
      e.CanExecute = !textBox.IsFocused; 
    } 

上面的代碼是僅用於說明。

+0

請參閱我對原始問題的編輯。 –

+0

看到我的迴應與編輯。 –

+0

我的命令最初並不是一個RoutedCommand,而是將其更改爲RoutedCommand並按照您的建議解決了我的問題! –