Как захватить Ctrl + Tab и Ctrl + Shift + Tab в WPF? - PullRequest
64 голосов
/ 02 мая 2009

Какой будет некоторый пример кода, который будет перехватывать Ctrl + Tab и Ctrl + Shift + Tab для приложения WPF?

Мы создали KeyDown события, а также попытались добавить привязки команд с помощью жестов ввода, но нам так и не удалось перехватить эти два ярлыка.

Ответы [ 5 ]

92 голосов
/ 02 мая 2009

Какой обработчик KeyDown у вас был? Код ниже работает для меня. Вот что доставляет мне неприятности: Alt + Tab , но вы об этом не просили: D

public Window1()
{
   InitializeComponent();
   AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}

private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
   {
      MessageBox.Show("CTRL + SHIFT + TAB trapped");
   }

   if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
   {
      MessageBox.Show("CTRL + TAB trapped");
   }
}
31 голосов
/ 26 мая 2010

Ответ Густаво был именно тем, что я искал. Мы хотим проверить ключи ввода, но разрешить вставку:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
   if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
      return;
}
8 голосов
/ 04 мая 2009

Вы должны использовать KeyUp событие, а не KeyDown ...

2 голосов
/ 18 ноября 2016

Рабочая версия Szymon Rozga ответа (извините, я не могу комментировать). Мы не смотрим на Alt, но его учет можно просто добавить сначала , если

  public View()
  {
     InitializeComponent();
     AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent);
  }

  private void controlKeyDownEvent(object sender, KeyEventArgs e)
  {
     if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
     {
        if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
           MessageBox.Show("CTRL + SHIFT + TAB trapped");
        else
           MessageBox.Show("CTRL + TAB trapped");
     }
  }
1 голос
/ 17 мая 2016

Привет, вы можете использовать это при событии keydown

 private void OnButtonKeyDown(object sender, KeyEventArgs e)
    {
        if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
        {
           //
           // TODO: somthing here
           //
        }
    }
...