Gibt es einige globale Konstrukte, die ich verwenden kann, wenn auf die Schaltflächen Steuerung, Umschalttaste und Alt gedrückt werden muss? Zum Beispiel im MouseDown
-Ereignis einer TreeView
.
Wenn das so ist, wie?
Verwenden Sie die Klasse Keyboard
. Mit Keyboard.IsKeyDown
können Sie überprüfen, ob Control, Shift, Alt jetzt deaktiviert ist.
Für Shift:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Zur Kontrolle:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Für Alt:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
Es gibt auch:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
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;
}
}
und auch:
wenn My.Computer.Keyboard.ShiftKeyDown dann ...
My.Computer.Keyboard.CtrlKeyDown
My.Computer.Keyboard.AltKeyDown
So gehe ich damit um (mit PreviewKeyDown), sagen wir, wir suchen nach Alt + R ...
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
&& e.SystemKey == Key.R)
{
//do whatever
}
}
Vielleicht kann jemand aufklären, warum ich e.SystemKey und nicht nur e.Key verwenden musste, vielleicht aufgrund des Modifikators? Dies hat jedoch bei der Suche nach Modifikator + Schlüssel einwandfrei für mich funktioniert.