WPF

In WPF gibt es 2 Möglichkeiten auf Tastaturbefehle zu reagieren. Wir gehen hier mal beispielhaft von einer Textbox als GUI Elemt aus, in dem ein Tastaturbefehl abgefangen werden soll.

Keydown Event

XML

<TextBox x:Name="txtTest" KeyDown="txtTest_KeyDown" AcceptsReturn="True" TextWrapping="Wrap"  SpellCheck.IsEnabled="True" Language="de-DE" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" />

Code

private void txtTextIntern_KeyDown(object sender, KeyEventArgs e)     {         
  if (e.Key == Key.A &&Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
  {
    if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
      MessageBox.Show("CTRL + SHIFT + A trapped");
    else
      MessageBox.Show("CTRL + A trapped");
  }
}

Als Keybinding

In diesem Beispiel wird auch gezeigt, wie man per Typumwandlung eine Funktion für alle WPF-Elemente mit dem selben Binding nutzen kann.

XML

<TextBox x:Name="txtTextExtern" AcceptsReturn="True" TextWrapping="Wrap"  SpellCheck.IsEnabled="True" Language="de-DE" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto">
  <TextBox.CommandBindings>
    <CommandBinding Command="SelectAll" Executed="SelectAllCommand" />
  </TextBox.CommandBindings>
  <TextBox.InputBindings>
    <KeyBinding Key="A" Modifiers="Control" Command="SelectAll" />
  </TextBox.InputBindings>
</TextBox>

Code

private void SelectAllCommand(object sender, ExecutedRoutedEventArgs e)
{
  if (e.Key == Key.A && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
  {
    var obj = (TextBox)sender;
    obj.SelectAll();
  }
}