В WPF как я могу дублировать старую функциональность WinForms onKeyPressed?

#wpf #input #keyboard #onkeypress #onkeydown

#wpf #ввод #клавиатура #onkeypress #onkeydown

Вопрос:

У нас есть приложение WPF, в котором нам нужно определить, вводит ли пользователь что-то, что может отображаться в текстовом поле. У WinForms раньше было хорошее переопределение onKeyPressed, которое отличалось от OnKeyDown тем, что оно вызывалось только при вводе печатаемого символа (например, оно различалось между ‘A’ и ‘a’, но не между ‘1’ в верхней строке и цифровая клавиатура. Он также игнорировал такие клавиши, как «Shift» и т.д.) Нам нужно продублировать эту функциональность в WPF.

Теперь я знаю, что могу переопределить OnKeyDown и проверить код ключа, но это означает ручное тестирование каждого возможного ключа, в результате чего что-то появится в текстовом поле. Похоже, это консенсус по другим подобным вопросам SO, которые я нашел, но я просто не могу поверить, что что-то настолько базовое было бы исключено из API.

Помимо огромного if-дерева, одним из «хакерских» решений является использование текстового поля в памяти, передача в него ключевого кода, затем проверка, имеет ли текст длину. Но меня начинает подташнивать, даже вводя это как возможное решение! ТЬФУ!! Я чувствую себя грязным!

ИТАК … какой самый простой способ определить, нажал ли пользователь клавишу или клавиши, результатом чего станет печатаемый символ?

TIA,

Отметить

Ответ №1:

На самом деле, я думаю, что я только что нашел это, поэтому я публикую ответы для других. Вы вообще не используете никаких событий ‘Key’. WPF более четко отделяет их от текстовых значений. Таким образом, вы переопределяете функции OnPreviewTextInput и / или OnTextInput . Чтобы получить то, что было фактически введено, проверьте .Text свойство в аргументах события, которое возвращает простую строку.

Готово и готово!

Надеюсь, это поможет другим! Меня загоняет в тупик!