我有一个具有菜单键盘快捷键和文本框的应用程序。我希望在文本框具有焦点时禁用键盘快捷键,但我无法找到一种简单的方法来执行此操作。我可以处理文本框的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
答案 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}}
以上代码仅供参考。