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

时间:2009-05-01 21:28:59

标签: wpf tabs key-bindings ctrl

什么样的代码会捕获 Ctrl + Tab Ctrl + Shift + < WPF应用程序的kbd> Tab ?

我们创建了KeyDown个事件,并尝试使用输入手势添加命令绑定,但我们从未能够捕获这两个快捷方式。

5 个答案:

答案 0 :(得分:92)

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

答案 1 :(得分:31)

Gustavo的回答正是我所寻找的。我们想要验证输入键,但仍允许粘贴:

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

答案 2 :(得分:8)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

您好,您可以在keydown事件

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