Как я читаю таможенную клавишу быстрого вызова от пользователя в WPF?

В моем заявлении я хочу позволить пользователям настроить клавиши быстрого вызова, точно так же, как оно сделано в клавишных вариантах Визуальной Студии. Пользователь может сосредоточить чистое текстовое окно и затем напечатать любой короткий путь, который он хочет назначить на команду.

Самое близкое я приехал, чтобы заставить его работать, подписываясь на TextBox. Событие PreviewKeyDown, устанавливая его, как обработано предотвращать фактический ввод текста в текстовом окне. Я тогда игнорирую события KeyDown, связанные с ключами модификатора (там более чистый способ определить, является ли Ключ ключом модификатора?).

// 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();

}

Вышеупомянутые работы для любого короткого пути, начинающегося с Ctrl и Ctrl+Shift, но, терпят неудачу для любых коротких путей Высокого звука. E. Ключ всегда устанавливается к Key.System когда я нажимаю короткий путь, содержащий Высокий звук.

Как я могу сделать запись коротких путей Высокого звука от пользователя? Есть ли лучший, более прочный способ сделать запись более легкой формы пользователь?

12
задан Anthony Brien 25 January 2010 в 23:15
поделиться