0

Snoop 显示命令是“ApplySingleSpace”,但是当我尝试通过本文中描述的方法禁用它时。像这样:

<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两者之中。

我错过了什么?

4

3 回答 3

2

不幸的是,这对我不起作用。我试图禁用该命令的原因是我在更高的嵌套视图中有一个没有触发的 KeyBinding,因为 CTRL+1 手势被具有键盘焦点的富文本框吞噬。

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

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

取自这个问题

于 2011-01-08T00:32:08.040 回答
1

使用此答案中的代码
如何在 C# 中以编程方式生成按键事件? 重新触发PreviewKeyDown 上的所有事件,而不是您希望由richtextbox 处理的事件似乎对我有用。(我只需要 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 }
        );
    }
  }
 
于 2011-02-04T01:48:41.497 回答
0

不如试着用手势来代替...

        <RichTextBox.InputBindings>
            <KeyBinding Command="BlockTheCommand" Gesture="CTRL+1" />
        </RichTextBox.InputBindings>
于 2011-01-07T22:44:03.700 回答