web-dev-qa-db-fra.com

Comment détecter les états de clé de modificateur dans WPF?

Existe-t-il des constructions globales que je peux utiliser chaque fois que je dois accéder aux boutons Ctrl, Shift, Alt en bas? Par exemple, dans l'événement MouseDown d'une TreeView.

Si c'est le cas, comment?

122
Joan Venge

Utilisez la classe Keyboard . En utilisant Keyboard.IsKeyDown vous pouvez vérifier si Ctrl, Maj, Alt est en bas maintenant.

Pour le décalage:

if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }

Pour le contrôle:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }

Pour Alt:

if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
211
Kyrylo M

Il y a aussi:

// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{

}
106
Chuck Savage
    private bool IsShiftKey { get; set; }

    private void OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;

        if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
        {
           e.Handled = true;
        }
    }
7
Krushik

et aussi:

si My.Computer.Keyboard.ShiftKeyDown, alors ...

My.Computer.Keyboard.CtrlKeyDown

My.Computer.Keyboard.AltKeyDown

0
Rob

Voici comment je le gère (en utilisant PreviewKeyDown), disons que nous recherchons Alt + R ...

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
       && e.SystemKey == Key.R)
    {
       //do whatever
    }
}

Peut-être que quelqu'un peut expliquer pourquoi j'ai dû utiliser e.SystemKey et pas seulement e.Key, peut-être à cause du modificateur? mais cela a parfaitement fonctionné pour moi lors de la recherche du modificateur + clé.

0
Josh