Pertanyaan Bagaimana cara menangkap Ctrl + Tab dan Ctrl + Shift + Tab di WPF?


Apa yang akan menjadi beberapa kode contoh yang akan menjebak Ctrl+Tab dan Ctrl+Bergeser+Tab untuk aplikasi WPF?

Kami telah menciptakan KeyDown acara dan juga mencoba menambahkan binding perintah dengan isyarat input, tetapi kami tidak pernah dapat menjebak kedua pintasan ini.


60
2018-05-01 21:28


asal


Jawaban:


Apa penangan KeyDown yang Anda miliki? Kode di bawah ini berfungsi untuk saya. Salah satu yang memberi saya masalah adalah: Alt + Tab, tetapi Anda tidak memintanya: 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");
   }
}

91
2018-05-01 21:40



Jawaban Gustavo persis seperti yang saya cari. Kami ingin memvalidasi kunci masukan, tetapi masih memungkinkan penyisipan:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
   if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
      return;
}

30
2018-05-25 23:20



Anda harus menggunakan KeyUp acara, bukan KeyDown...


8
2018-05-04 16:35



Hai, Anda dapat menggunakan ini di acara kuncian

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

1
2018-05-17 09:59



Versi kerja dari Szymon Rozga jawaban (maaf, saya tidak bisa berkomentar). Kami tidak melihat pada Alt, tetapi akuntansi dapat ditambahkan pada awalnya jika

  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
2017-11-18 12:40