AvalonEdit :: Ctrl + I 键绑定不起作用

AvalonEdit :: Ctrl + I KeyBinding Doesn't Work

我正在使用 AvalonEdit(惊喜)创建一个文本编辑器。我已将 KeyBindings 添加到声明中:

<ae:TextEditor x:Name="TextEditor" ... >
   <ae:TextEditor.InputBindings>
      <KeyBinding Command="ToggleBold" Key="B" Modifiers="Control"/>
      <KeyBinding Command="ToggleItalic" Key="I" Modifiers ="Control"/>
      <!-- other bindings -->
   </ae:TextEditor.InputBindings>
</ae:TextEditor>

我有大约二十个与典型命令关联的按钮,它们都在工作,包括 EditingCommands.ToggleItalic。我有与命令关联的 KeyBindings,它们都按预期工作 ,唯一的例外是 Ctrl+I。我无法让 Ctrl+I 键绑定组合与 any 命令一起使用(例如,尝试将其与 ToggleBold 一起使用)。

要明确:

  1. 如果我绑定到 不是 Ctrl+I - Ctrl+Shift+I 的东西,ToggleItalicKeyBinding 就可以工作,因为例如,完美运行。
  2. Ctrl+I 组合似乎不适用于 任何 KeyBinding。

有人知道为什么会这样吗?我不想偏离默认的 KeyBindings - Ctrl+I 的 ToggleItalics 对于我们这些喜欢键盘快捷键的人来说已经根深蒂固了。

AvalonEdit 控件中的 Ctrl+I KeyGesture 已经关联到 IndentSelection AvalonEditCommand(它是一个 RoutedCommand,因此它可以有一个或多个 InputGestures)。

如果您查看 AvalonEditCommands class,您会发现此代码:

public static readonly RoutedCommand IndentSelection = new RoutedCommand( 
    "IndentSelection", typeof(TextEditor), 
    new InputGestureCollection { 
        new KeyGesture(Key.I, ModifierKeys.Control) 
});

因此您必须删除 IndentSelection CommandBinding(在 EditingCommandHandler class 中)才能将 Ctrl+I KeyGesture 用于另一个命令。

编辑 我在想你可以尝试通过清除 Application.OnStartup 方法中 IndentSelection 命令的 InputGestureCollection 来解决你的问题:

protected virtual void OnStartup(StartupEventArgs e)
{
    AvalonEditCommands.IndentSelection.InputGestures.Clear();
    /* If you want now you can add a new inputgesture */
    /* The rest of your code... */
}

我没有测试这个解决方案,但我想它可以工作。