Проверка TextCompositionEventArgs.ControlText с помощью кодировки Unicode - PullRequest
1 голос
/ 04 апреля 2019

Я смотрю на пример WPF из книги, где OnPreviewTextInput переопределяется в классе, производном от Window.Переопределение проверяет строку TextCompositionEventArgs.ControlText по отношению к буквальному символу Unicode '\u000F'.Это соответствует тому, что пользователь нажимает Ctrl + O.

Символ '\u000F' для меня выглядит буквально как «волшебный».Как я узнаю, что нужно проверить, если я хочу проверить другие коды?Есть ли более удобный для читателей способ сделать это?

protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
    // Ctrl+O
    if (e.ControlText.Length > 0 && e.ControlText[0] == '\u000F')
    {
        // do stuff
    }
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Использование метода Keyboard.IsKeyDown должно сделать код более читабельным:

protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
    // Ctrl+O
    if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
        && Keyboard.IsKeyDown(Key.O))
    {
        //...
    }
}
1 голос
/ 04 апреля 2019

Как вы уже догадались, это "магический" буквальный.Но в магии есть некоторая логика и история.Он соответствует старому понятию, называемому Управляющие символы (длительное чтение, только если вам интересно).

Для быстрой ссылки на то, как 0x0F соответствует Ctrl-O, , см. Эту таблицу .Сосредоточьтесь на первом столбце с символом каретки ;вы увидите, что символы 1-26 (0x01 - 0x1A) отображаются Ctrl-A в Ctrl-Z.Символ 15 (или 0x0F) - ваш Ctrl-O.

Эти старые управляющие коды ASCII были перенесены в Unicode, сохранив их отображение.Отсюда ваши '\u0000F'.

Если вы достаточно долго были в Интернете, вы увидите немые ^ H ^ H ^ H ^ Потрясающие шутки, основанные на тайном знании, которое ^H отображает наBackspace управляющий персонаж.Вы можете попробовать некоторые из них.Запустите Блокнот, и вы увидите, что Ctrl-I и Ctrl-M отображаются на Tab и Enter соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...