Как отключить стандартную команду RichTextBox для Ctrl + 1? - PullRequest
0 голосов
/ 08 января 2011

Snoop показывает, что команда "ApplySingleSpace", но когда я пытаюсь отключить ее с помощью метода, описанного в этой статье . Как это:

<RichTextBox.CommandBindings>
     <CommandBinding 
       Command="ApplySingleSpace" 
       CanExecute="BlockTheCommand"/>
   </RichTextBox.CommandBindings>

.

  private void BlockTheCommand(object sender,
     CanExecuteRoutedEventArgs e)
   {
     e.CanExecute = false;
     e.Handled = true;
   }

Мое приложение вылетает из-за отсутствия команды ApplySingleSpace. ApplySingleSpace тоже не входит в EditingCommands.

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 08 января 2011

К сожалению, это не будет работать для мне. Причина, по которой я пытаюсь отключить команда в том, что у меня есть Связывание клавиш в более высоком вложенном представлении это не стрельба, потому что CTRL + 1 жест проглатывается richtextbox с клавиатурным фокусом.

Как насчет перезаписи связывания клавиш пользовательской командой, которая делает то, что вы хотите, вместо того, чтобы каким-либо образом отключить ее?

<RichTextBox.InputBindings>
    <KeyBinding Command="local:YourCommands.Cmd1" Gesture="CTRL+1" />
<RichTextBox.InputBindings>

Взято из этого вопроса .

1 голос
/ 04 февраля 2011

Используя код из этого ответа Как я могу программно генерировать события нажатия клавиш в C #? , чтобы переопределить все события в PreviewKeyDown, кроме тех, которые вы хотите обработать с помощью richtextbox, мне кажется, работает.(Мне нужно только Ctrl-C для копирования).Конечно, вы можете сделать так, чтобы он обновлял Ctrl-1, только если это то, что вам нужно.


private void logKeyHandler(object sender, KeyEventArgs e)
{
    if (!(Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.C))
    {
        e.Handled = true;
        var routedEvent = Keyboard.KeyDownEvent; 
        this.RaiseEvent(
            new KeyEventArgs(
            Keyboard.PrimaryDevice, 
            PresentationSource.FromDependencyObject(this),
            0,
            e.Key) { RoutedEvent = routedEvent }
        );
    }
  }
 
0 голосов
/ 08 января 2011

А как насчет попытки с жестом вместо ...

        <RichTextBox.InputBindings>
            <KeyBinding Command="BlockTheCommand" Gesture="CTRL+1" />
        </RichTextBox.InputBindings>
...