Пишу калькулятор под 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;
}
Комментариев нет:
Отправить комментарий