AvalonEdit :: Ctrl + I KeyBinding不起作用

时间:2015-04-13 16:37:58

标签: wpf wpf-controls key-bindings avalonedit

我正在使用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>

我有大约20个与典型命令相关联的按钮,它们都在工作,包括EditingCommands.ToggleItalic。我有与命令关联的KeyBinding,它们都按预期工作,但唯一的例外是 Ctrl+I 。我无法使用Ctrl + I键绑定组合来使用任何命令(例如,尝试使用ToggleBold)。

要明确:

  1. KeyBinding的{​​{1}}有效,如果我绑定的内容不是 ToggleItalic - Ctrl+I,例如,效果很好。
  2. Ctrl+Shift+I组合似乎不适用于任何 KeyBinding。
  3. 任何人都有任何想法,为什么会这样?我不想偏离默认的KeyBindings - 对于我们这些喜欢键盘快捷键的人来说,ToggleItalics Ctrl+I已经根深蒂固了。

1 个答案:

答案 0 :(得分:0)

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

如果您查看AvalonEditCommands课程,您会找到以下代码:

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

所以你必须删除IndentSelection CommandBinding(在EditingCommandHandler类中),以便将Ctrl+I KeyGesture用于另一个命令。

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

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... */
}

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