W mojej aplikacji chcę umożliwić użytkownikom dostosowywanie skrótów klawiaturowych, tak jak w opcjach klawiatury Visual Studio. Użytkownik może ustawić ostrość w pustym polu tekstowym, a następnie wpisać dowolny skrót, który chce przypisać do polecenia.Jak mogę odczytać niestandardowy skrót klawiaturowy od użytkownika w WPF?
Najbliżej, doszedłem do jego działania, subskrybując zdarzenie TextBox.PreviewKeyDown, ustawiając je jako obsługiwane, aby zapobiec wprowadzaniu tekstu w polu tekstowym. Zignorowałem następnie zdarzenia KeyDown powiązane z kluczami modyfikującymi (czy istnieje bardziej przejrzysty sposób określenia, czy klucz jest kluczem modyfikującym?).
// Code-behind
private void ShortcutTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
// The text box grabs all input
e.Handled = true;
if (e.Key == Key.LeftCtrl ||
e.Key == Key.RightCtrl ||
e.Key == Key.LeftAlt ||
e.Key == Key.RightAlt ||
e.Key == Key.LeftShift ||
e.Key == Key.RightShift)
return;
string shortcutText = "";
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
shortcutText += "Ctrl+";
if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
shortcutText += "Shift+";
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
shortcutText += "Alt+";
_ShortcutTextBox.Text = shortcutText + e.Key.ToString();
}
Powyższe prace dla dowolnego skrótu począwszy Ctrl + Shift i Ctrl, ale nie dla wszystkich skrótów Alt. E.Key jest zawsze ustawiony na Key.System
po naciśnięciu skrótu zawierającego Alt.
Jak mogę nagrywać skróty Alt u użytkownika? Czy istnieje lepszy, bardziej niezawodny sposób zapisywania skrótów od użytkownika?
Mam wrażenie, że klawisz WP jest używany przez WPF do próby przechwycenia kombinacji klawisza Alt w celu skupienia się na formantu, który jest powiązany z etykietą za pomocą skrótu mnemonicznego (np. Alt + F dla menu _File lub Alt + O dla przycisku _OK). Może istnieje sposób, aby temu zapobiec? –