检测KeyRoutedEventArgs事件中是否按下了修改键

Elm*_*lmo 12 .net c# xaml windows-runtime uwp

我有以下代码:

public void tbSpeed_KeyDown(object sender, KeyRoutedEventArgs e)
{
    e.Handled = !((e.Key >= 48 && e.Key <= 57) || (e.Key >= 96 && e.Key <= 105) || (e.Key == 109) || (e.Key == 189));
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检测是否正在按任何修改键如Shift?

小智 17

使用GetKeyState.例如

var state = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
return (state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down;
Run Code Online (Sandbox Code Playgroud)

注意:对于Alt,您将使用VirtualKey.Menu.


Mic*_*bin 5

对于Win10 UWP,我注意到CTRL和SHIFT键设置为“锁定”状态。所以我做了以下事情:

var shiftState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control);

var isShiftDown = shiftState != CoreVirtualKeyStates.None;
var isCtrlDown = ctrlState != CoreVirtualKeyStates.None;
Run Code Online (Sandbox Code Playgroud)

  • 实际上,最好使用HasFlag方法-CoreWindow.GetForCurrentThread()。GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)实际按下。 (2认同)