我如何为特定的键盘按键添加额外条件,以应用于 WPF 的 MouseLeftButtonDown
事件处理程序?
例如,Ctrl + 某个按键。
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
...
}
我如何为特定的键盘按键添加额外条件,以应用于 WPF 的 MouseLeftButtonDown
事件处理程序?
例如,Ctrl + 某个按键。
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
...
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
if(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) {
MessageBox.Show("Control key is down");
} else {
MessageBox.Show("Control key is up");
}
}
如果你只想检测修改键,也可以使用:
if (Keyboard.Modifiers == ModifierKeys.Control) {}
if (Keyboard.Modifiers == ModifierKeys.Shift) {}
等等。更多内容在这里。
在.NET 4.0中,您可以使用:
Keyboard.Modifiers.HasFlag(ModifierKeys.Control)
正如Grzegorz Godlewski所说above, 可以使用Keyboard.Modifiers.HasFlag(ModifierKey.Control)
。
尽管@l33t指出它的性能不是很好,在评论中出现了在.NET 4.5/4.6中改进HasFlag
性能的情况(请参见What is it that makes Enum.HasFlag so slow?和下面的评论,还有in this answer的结果)。
但是根据here的结论,仍然没有像进行本地检查(即flagsToCheck & flag != 0)那样快的方法。
ModifierKeys
是一个标志枚举。因此,正确检查ctrl
键是否被按下的方式是if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {}
。 - mt_sergif (Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) { }
来使它变得更简单。 - BrainSlugs83