使用 WPF KeyDown 事件了解多个键

Understanding multiple keys with WPF KeyDown event

我正在使用 WPF KeyDown 事件。你能解释一下为什么当我按下 Ctrl+F1 时这个条件成立吗?当我按下 F1 时,Ctrl 已经按下,所以 !Keyboard.IsKeyDown(Key.LeftCtrl) 应该是假的。

编辑:

在下面的代码中,如果您按 Ctrl+F1,两条消息都会触发。但是如果你改变这两个 if 语句的顺序,只有 "ctrlF1" 消息会像它应该的那样触发。我想得到对这种奇怪行为的解释。

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl))
    {
        MessageBox.Show("ctrlF1");
    }
    if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl))
    {
        MessageBox.Show("F1");
    }
}

区别如下:

  • 在您显示的代码中,当进入处理程序时,按下 F1 并按下 Ctrl(第一个 if- 的两个条件子句为真)。 MessageBox 阻塞线程。同时松开 Ctrl 键并单击消息。然后代码继续执行并且不再按下 Ctrl 键(第二个 if 子句的两个条件都为真)
  • 如果切换 if 语句,则只有第一个 if 语句的第一个条件 (e.Key == Key.F1) 为真。执行到第二个 if 语句并且两个条件都为真。显示 MessageBox 并停止执行,直到 MessageBox 关闭。

不同之处在于:按下 F1 键是在调用处理程序之前计算的,但是检查 Keyboard.IsKeyDown(Key.LeftCtrl) 是在这一刻计算的,当代码被执行