使用WPF KeyDown事件的多个键
问题描述:
我正在使用WPF KeyDown事件(来自Windows.Input的KeyEventArgs)。我需要识别何时用户单独按下F1和Ctrl + F1。使用WPF KeyDown事件的多个键
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的情况下,但它没有帮助。
答
用途:
else if.....
在你的情况这两个选项被解雇,因为你按在这两种情况下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");
}
}
答
我认为你正在寻找Keyboard.Modifiers
if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
{
button1.Background = Brushes.Red;
}
else
{
button1.Background = Brushes.Blue;
}
+0
不错,会用它 – Dork
作品。但仍然不明白为什么它会引发我的情况。当我按下F1 Ctrl时,那么!Keyboard.IsKeyDown(Key.LeftCtrl)应该是假的 – Dork