如何禁用Ctrl + 1的默认RichTextBox命令?

时间:2011-01-07 22:23:43

标签: wpf richtextbox commandbinding

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

我错过了什么?

3 个答案:

答案 0 :(得分:2)

  

不幸的是,这不会起作用   我。我试图禁用的原因   命令是我有一个   更高嵌套视图中的KeyBinding   因为CTRL + 1而未触发   手势被吞噬了   richtextbox有keyboardfocus。

如何使用自定义命令覆盖KeyBinding,而不是试图以某种方式禁用它?

<RichTextBox.InputBindings>
    <KeyBinding Command="local:YourCommands.Cmd1" Gesture="CTRL+1" />
<RichTextBox.InputBindings>

取自this question

答案 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>