2015-04-13 6 views
0

Я использую AvalonEdit для (неожиданности) создания текстового редактора. Я добавил к комбинации клавиш декларации:AvalonEdit :: Ctrl + I KeyBinding не работает

<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 для работы с любой командой (попробовал использовать ее с ToggleBold, например).

Чтобы было ясно:

  1. KeyBinding для ToggleItalic работает, если я связываю к чему-то, что неCtrl+I - Ctrl+Shift+I, например, отлично работает.
  2. Комбинация Ctrl+I не работает для любая KeyBinding.

У кого-нибудь есть идеи, почему это может быть? Я не хочу отклоняться от стандартного KeyBindings - Ctrl+I для ToggleItalics довольно укоренился для тех из нас, кто любит наши быстрые клавиши.

ответ

0

Ctrl+I KeyGesture в элементе управления AvalonEdit уже связан с 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 для другого команда.

EDIT Я думал, вы можете попытаться решить проблему, очистив InputGestureCollection команды IndentSelection в вашем Application.OnStartup метод:

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

Я не проверял это решение, но я предполагаю, что это может Работа.

+0

Как я могу получить доступ к этому классу? Я не могу найти его экземпляр ни в одном из свойств TextEditor ... Где они скрывают его? –

+0

@ScottSEA, я отредактировал свой ответ с альтернативным (и более простым) решением. –

+0

Очистка входного жеста отлично работала. Благодарю. –

Смежные вопросы