【发布时间】:2010-11-17 00:51:00
【问题描述】:
在 WPF 中将命令绑定到 Ctrl+N 手势时有一个奇怪的区别。这些手势中的一些但不是全部都被忽略了,其余的都可以。有没有其他人偶然遇到过这种行为?
Window XAML 结构非常简单:命令绑定、输入绑定,以及带有 Menu 和 RichTextBox 的 DockPanel。经测试,只有输入焦点在RichTextBox时才会出现问题。
对于测试,为所有数字键定义了窗口输入绑定,如下所示。 结果,Ctrl+1、Ctrl+2 和 Ctrl+5 不会做任何事情,而 Ctrl+3 、4、6-9 和 0 工作正常。 Alt+1、Alt+2 也可以正常工作。
<Window.InputBindings>
<KeyBinding Command="me:MainWindow.MyRC" Gesture="CTRL+0" />
<KeyBinding Command="me:MainWindow.MyRC" Gesture="CTRL+1" />
...
<KeyBinding Command="me:MainWindow.MyRC" Gesture="CTRL+9" />
</Window.InputBindings>
问题原因
正如 Andy 所指出的,RichTextBox 已经将一些手势绑定到内部命令。在 RTB 中处理此手势时,它不会传递到窗口级别。当击键对 RTB 中的文本没有明显影响时,这有点难以检测。
解决方案 1
如果命令仅在 RTB 上下文中有意义 - 移动其中的输入绑定以覆盖默认命令绑定:
<RichTextBox.InputBindings>
<KeyBinding Command="me:WindowBindingTest.MyRC1" Gesture="CTRL+1" />
<KeyBinding Command="me:WindowBindingTest.MyRC2" Gesture="CTRL+2" />
<KeyBinding Command="me:WindowBindingTest.MyRC5" Gesture="CTRL+5" />
</RichTextBox.InputBindings>
解决方案 2
如果命令具有“更大范围”并且即使输入焦点在 RTB 之外也应该可用 - 从未使用的默认 RTB 命令中删除手势绑定:
<RichTextBox.InputBindings>
<KeyBinding Command="NotACommand" Gesture="CTRL+1" />
<KeyBinding Command="NotACommand" Gesture="CTRL+2" />
<KeyBinding Command="NotACommand" Gesture="CTRL+5" />
</RichTextBox.InputBindings>
【问题讨论】:
标签: wpf richtextbox