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 一起使用)。
要明确:
- 如果我绑定到 不是
Ctrl+I
- Ctrl+Shift+I
的东西,ToggleItalic
的 KeyBinding
就可以工作,因为例如,完美运行。
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... */
}
我没有测试这个解决方案,但我想它可以工作。
我正在使用 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 一起使用)。
要明确:
- 如果我绑定到 不是
Ctrl+I
-Ctrl+Shift+I
的东西,ToggleItalic
的KeyBinding
就可以工作,因为例如,完美运行。 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... */
}
我没有测试这个解决方案,但我想它可以工作。