Как я могу захватить CTRL-BACKSPACE в WPF / C #? - PullRequest
0 голосов
/ 12 октября 2010

У меня есть приложение, которое использует PreviewKeyDown для захвата CTRL X нажатий клавиш (где X - любая буква) вдоль строк:

Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) {
    switch (key) {
        case Key.A: keyStroke = 0x01; break;
        case Key.B: keyStroke = 0x02; break;
        :

Поскольку для возврата на задний план, кажется, нет нажатия клавиш, я фиксирую это с помощью PreviewTextInput (наряду с не CTRL нажатиями клавиш, чтобы избежать попытки сопоставления клавиш с символами вручную ):

private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e) {
    Char ch = e.Text.ToCharArray()[0];
    if ((ch >= (Char)0x01) && (ch <= (Char)0x7e)) {
        // Do something with character.
    }
}

Однако мне нужно иметь возможность захватить пользователя, нажав CTRL BACKSPACE . Я в растерянности, так как PreviewKeyDown, кажется, не знает о возврате, а событие TextCompositionEventArgs, похоже, не содержит состояний клавиш (например, CTRL или ALT).

Каков наилучший способ (или, на самом деле, любой способ) перехватить CTRL BACKSPACE ?

1 Ответ

2 голосов
/ 12 октября 2010

Чтобы обнаружить клавишу возврата, вам нужно использовать значение Key.Back перечисления Key.

Например:

Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) {
    switch (key) {
        case Key.A: keyStroke = 0x01; break;
        case Key.B: keyStroke = 0x02; break;
        case Key.Back: // Do something
        break;
    }
}
...