Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Как перехватить нажатия клавиш?

Пишу калькулятор под WPF. На данный момент нажатие на кнопки производит запись данных в textbox, но хотелось бы чтобы при нажатии цифр на клавиатуре они были забиндены к методам, т.е. чтобы тупо было перехват кнопок. Делать через WinApi думаю будет слишком избыточно, нет ли в самом WPF такого?
private void One_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "1"; storageVariable += "1"; } private void Two_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "2"; storageVariable += "2"; } private void Three_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "3"; storageVariable += "3"; } private void Four_Click(object sender, RoutedEventArgs e) { if (totalled == true) { Display.Content = ""; totalled = false; } Display.Content += "4"; storageVariable += "4"; }


Ответ

Проще всего подписаться на события KeyDown или PreviewKeyDown в окне.
Порядок доставки такой: сначала приходит PreviewKeyDown окну, затем по цепочке внутрь контролу, у которого фокус, потом приходит KeyDown контролу, и по цепочке вверх к окну.
Если вам не нужны на уровне окна нажатия на служебные клавиши, которые обработает TextBox (left/right/del), подписывайтесь на KeyDown. PreviewKeyDown позволяет также заблокировать ввод текста (например, вы хотите запретить ввод буквы A), и получает всё подряд.
Пример:
...

void OnPreviewKeyDown(object sender, KeyEventArgs e) { var key = e.Key; if (key == Key.A) e.Handled = true; }

Комментариев нет:

Отправить комментарий