RichTextBox中的键绑定手势“Ctrl + 1”不起作用

时间:2010-11-17 00:51:00

标签: wpf richtextbox

将命令绑定到WPF中的 Ctrl + N 手势时有一个奇怪的区别。一些但不是所有这些手势都被忽略了,其余的都没问题。有没有其他人有机会体验过这种行为?

Window XAML结构非常简单:命令绑定,输入绑定和带有Menu和RichTextBox的DockPanel。测试后,仅当输入焦点位于RichTextBox中时才会出现问题。

对于测试,为所有数字键定义了Window输入绑定,如下所示。 因此, 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内部处理此手势时,它将不会传递到Window级别。当关键笔划对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

如果commmand具有“更大范围”并且即使输入焦点位于RTB之外也应该可用 - 从未使用的默认RTB命令中删除手势绑定:

<RichTextBox.InputBindings>
    <KeyBinding Command="NotACommand" Gesture="CTRL+1" />
    <KeyBinding Command="NotACommand" Gesture="CTRL+2" />
    <KeyBinding Command="NotACommand" Gesture="CTRL+5" />
</RichTextBox.InputBindings>

1 个答案:

答案 0 :(得分:2)

看起来RichTextBox已经使用 Ctrl + 1 (“ApplySingleSpace”)为命令定义了绑定。因此,它可能会处理命令,而不是让它路由到窗口。

您可以通过向InputBinding添加RichTextBox来解决此问题,但由于当其他控件处于焦点时您在Window上也需要它,因为这不是一个很好的解决方案。