Detect if Modifier Key is Pressed in KeyRoutedEventArgs Event

后端 未结 4 794
梦毁少年i
梦毁少年i 2020-12-06 10:55

I have the following code:

public void tbSpeed_KeyDown(object sender, KeyRoutedEventArgs e)
{
    e.Handled = !((e.Key >= 48 && e.Key <= 57) ||         


        
相关标签:
4条回答
  • 2020-12-06 11:14

    For Win10 UWP I noticed that the CTRL and SHIFT keys were set at Locked state. So I did the following:

    var shiftState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
    var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control);
    
    var isShiftDown = shiftState != CoreVirtualKeyStates.None;
    var isCtrlDown = ctrlState != CoreVirtualKeyStates.None;
    
    0 讨论(0)
  • 2020-12-06 11:14

    Bitwise AND the Modifiers property of Keyboard with Shift Key -

    bool isShiftKeyPressed = (Keyboard.Modifiers & ModifierKeys.Shift)
                             == ModifierKeys.Shift;
    

    Try this too-

    bool isShiftKeyPressed = (ModifierKeys & Keys.Shift) == Keys.Shift;
    

    OR

    Control.ModifierKeys == Keys.Shift
    
    0 讨论(0)
  • 2020-12-06 11:31

    Use GetKeyState. e.g.

    var state = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift);
    return (state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down;
    

    Note: For Alt, you would use VirtualKey.Menu.

    0 讨论(0)
  • 2020-12-06 11:31

    You can try the following code

    CoreVirtualKeyStates controlKeyState = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
    var  ctrl = (controlKeyState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down;
    
    CoreVirtualKeyStates shiftKeyState = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift);
    var shift = (shiftKeyState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down;
    
    0 讨论(0)
提交回复
热议问题