将命令绑定到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中的文本没有明显影响时,这有点难以检测。
如果命令仅在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>
如果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>
答案 0 :(得分:2)
看起来RichTextBox
已经使用 Ctrl + 1 (“ApplySingleSpace”)为命令定义了绑定。因此,它可能会处理命令,而不是让它路由到窗口。
您可以通过向InputBinding
添加RichTextBox
来解决此问题,但由于当其他控件处于焦点时您在Window
上也需要它,因为这不是一个很好的解决方案。