我正在使用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)。
要明确:
KeyBinding
的{{1}}有效,如果我绑定的内容不是 ToggleItalic
- Ctrl+I
,例如,效果很好。 Ctrl+Shift+I
组合似乎不适用于任何 KeyBinding。任何人都有任何想法,为什么会这样?我不想偏离默认的KeyBindings - 对于我们这些喜欢键盘快捷键的人来说,ToggleItalics Ctrl+I
已经根深蒂固了。
答案 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... */
}
我没有测试这个解决方案,但我认为它可以工作。