如何在WPF中禁止菜单键盘快捷键KeyDown处理?

时间:2011-10-05 03:20:04

标签: wpf textbox keyboard-shortcuts

我有一个具有菜单键盘快捷键和文本框的应用程序。我希望在文本框具有焦点时禁用键盘快捷键,但我无法找到一种简单的方法来执行此操作。我可以处理文本框的PreviewKeyDown事件,但发送KeyDown事件不会导致TextInput事件触发,所以我必须自己手动触发TextInput事件,并且我必须确保每个文本框都覆盖PreviewKeyDown事件并创建一个TextInput事件。

这是在文本框具有焦点时抑制菜单键盘快捷键的唯一方法,还是有另一种不易出错的方式?

编辑:

以下是我添加键盘快捷键的方法:

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 个答案:

答案 0 :(得分:1)

您是否可以提供更多输入,如何注册键盘快捷键?使用KeyBinding?如果是这样,它已经指定了Command。因此,如果文本框处于焦点,则在命令的Canexecute中返回false。

这将禁用键盘快捷键。来自您身边的一些来源可能很有用。

修改

现在您KeyBinding KeyBindingCommand RoutedCommand看起来像CanExecute。如果是,那么具有 m_Parent.CommandBindings.Add(new CommandBinding(KeyBindingCommand, OnExecuted, CanExcute)); 功能的命令绑定。

CanExecute

CanExecutedRoutedArgs处理程序.... private void CanExecute(object sender, CanExecutedRoutedArgs args) { e.CanExecute = !textBox.IsFocused; } 可能/可能不是正确...

{{1}}

以上代码仅供参考。