Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有WPF KeyDown事件的多个键_C#_Wpf_Keyboard_Keyboard Events_Keydown - Fatal编程技术网

C# 具有WPF KeyDown事件的多个键

C# 具有WPF KeyDown事件的多个键,c#,wpf,keyboard,keyboard-events,keydown,C#,Wpf,Keyboard,Keyboard Events,Keydown,我正在使用WPF KeyDown事件(来自Windows.Input的KeyEventArgs)。我需要识别用户何时单独按下F1和Ctrl+F1 private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl)) { MessageBox.Show(

我正在使用WPF KeyDown事件(来自Windows.Input的KeyEventArgs)。我需要识别用户何时单独按下F1和Ctrl+F1

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

我的问题是,当我按下Ctrl+F1时,普通的F1消息框也会启动。我试图将e.Handled添加到Ctrl+F1的案例中,但没有帮助。

使用if和else,否则所有条件都会得到评估

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


在您的情况下,这两个选项都被触发,因为您在这两种情况下都按F1键。

我想您正在寻找


首先选中Key.F1,如果按下,则选中Key.LeftCtrl:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.F1)
    {
        MessageBox.Show(Keyboard.IsKeyDown(Key.LeftCtrl) ? "Ctrl-F1" : "F1");
    }
}

作品但我还是不明白为什么在我的情况下它会开火。当我按F1键时,Ctrl键被按下,所以!Keyboard.IsKeyDown(Key.LeftCtrl)应该为false,但如何将这两个键传递到一起??当我想在调试时点击alt+f1时,我发现调试器点击alt本身,并且在&&&之后的下一个条件中,永远不会将evaluate设置为true。
if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
{
    button1.Background = Brushes.Red;
}
else
{
    button1.Background = Brushes.Blue;
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.F1)
    {
        MessageBox.Show(Keyboard.IsKeyDown(Key.LeftCtrl) ? "Ctrl-F1" : "F1");
    }
}