Snoop显示该命令是“ApplySingleSpace”,但是当我尝试通过this article 中描述的方法禁用它时。像这样:
<RichTextBox.CommandBindings>
<CommandBinding
Command="ApplySingleSpace"
CanExecute="BlockTheCommand"/>
</RichTextBox.CommandBindings>
private void BlockTheCommand(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = false;
e.Handled = true;
}
我的应用崩溃了,因为没有ApplySingleSpace
命令。 ApplySingleSpace
也不在EditingCommands
。
我错过了什么?
答案 0 :(得分:2)
不幸的是,这不会起作用 我。我试图禁用的原因 命令是我有一个 更高嵌套视图中的KeyBinding 因为CTRL + 1而未触发 手势被吞噬了 richtextbox有keyboardfocus。
如何使用自定义命令覆盖KeyBinding,而不是试图以某种方式禁用它?
<RichTextBox.InputBindings>
<KeyBinding Command="local:YourCommands.Cmd1" Gesture="CTRL+1" />
<RichTextBox.InputBindings>
答案 1 :(得分:1)
使用此答案中的代码
How can I programmatically generate keypress events in C#?
除了那些你想要由richtextbox处理的事件之外,重新启用PreviewKeyDown上的所有事件似乎对我有用。 (我只需要Ctrl-C进行复制)。当然你可以做到这一点,只有当你需要它时才会重新使用Ctrl-1。
private void logKeyHandler(object sender, KeyEventArgs e)
{
if (!(Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.C))
{
e.Handled = true;
var routedEvent = Keyboard.KeyDownEvent;
this.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromDependencyObject(this),
0,
e.Key) { RoutedEvent = routedEvent }
);
}
}
答案 2 :(得分:0)
尝试使用手势怎么样......
<RichTextBox.InputBindings>
<KeyBinding Command="BlockTheCommand" Gesture="CTRL+1" />
</RichTextBox.InputBindings>