如何捕获WPF中的Ctrl + Tab和Ctrl + Shift + Tab?

什么样的代码会捕获WPF应用程序的Ctrl + TabCtrl + Shift + Tab

我们已经创build了KeyDown事件,并尝试添加与input手势的命令绑定,但我们从来没有能够捕获这两个快捷方式。

你有什么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"); } } 

古斯塔沃的回答正是我所期待的。 我们要validationinput密钥,但仍允许粘贴:

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

您必须使用KeyUp事件,而不是KeyDown

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"); } } 

嗨,你可以使用这个在keydown事件

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