67

WPF アプリケーションのCtrl+TabCtrl+ Shift+をトラップするサンプル コードは何ですか?Tab

イベントを作成KeyDownし、入力ジェスチャを使用してコマンド バインディングを追加しようとしましたが、これら 2 つのショートカットをトラップすることはできませんでした。

4

5 に答える 5

96

どの 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");
   }
}
于 2009-05-01T21:40:09.677 に答える
31

グスタボの答えはまさに私が探していたものでした. 入力キーを検証したいのですが、貼り付けは許可します。

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
   if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
      return;
}
于 2010-05-25T23:20:09.067 に答える
8

KeyUpではなく、イベントを使用する必要がありKeyDownます...

于 2009-05-04T16:35:52.080 に答える
4

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");
     }
  }
于 2016-11-18T12:40:25.337 に答える
1

こんにちは、キーダウンイベントでこれを使用できます

 private void OnButtonKeyDown(object sender, KeyEventArgs e)
    {
        if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
        {
           //
           // TODO: somthing here
           //
        }
    }
于 2016-05-17T09:59:10.367 に答える