Как мы должны обрабатывать события клавиатуры в WPF? Это должно быть KeyUp или KeyDown?

Я использовал WPF со всеми событиями туннелирования и пузырей, и должен сказать, что они просто великолепны и мощны.
Но я всегда спрашиваю себя, использовать ли [PreviewKeyUp и KeyUp] или [PreviewKeyDown и Keydown]?

Какую комбинацию следует использовать для реакции на нажатия клавиш и почему?


person GuruC    schedule 02.02.2012    source источник
comment
Это зависит от того, где вы хотите быть в цепочке. KeyDown обрабатываются до KeyUps. Поэтому, если вы хотите остановить его до того, как он перейдет в обработчик события, KeyDown. Ищите всплывающие и перенаправленные события на MSDN.   -  person paparazzo    schedule 03.02.2012


Ответы (2)


Зависит от того, что вы хотите сделать:

  1. PreviewKeyDown = ДО нажатия клавиши
    Пример: если у вас есть событие в текстовом поле, текущая нажатая клавиша не добавляется в TextBox.Text
  2. PreviewKeyUp = ДО отпускания клавиши
  3. KeyDown = ПОСЛЕ нажатия клавиши
    Пример: если у вас есть событие в текстовом поле, текущая нажатая клавиша добавляется в TextBox.Text
  4. KeyUp = ПОСЛЕ отпускания клавиши

Опять же, это зависит от того, что вы хотите делать. Если вы хотите добавить проверку TextBox, используйте PreviewKeyDown, чтобы игнорировать текст, если он неверен.

Если вы хотите что-то сделать, когда пользователь отпускает ПРОБЕЛ, используйте KeyUp

person MyKuLLSKI    schedule 02.02.2012

Все зависит от ситуации, например, при выборе элемента в списке нужно будет иметь значение KeyDown, чтобы можно было удерживать клавишу и изменить выбранный элемент.

Если у вас есть элемент с несколькими визуальными состояниями, например кнопку, KeyDown может изменить визуальное состояние, тогда KeyUp вернет визуал в исходное состояние и выполнит команду.

В вашей ситуации все будет зависеть от того, когда вы хотите, чтобы событие было инициировано, я бы не сказал, что один из них лучше другого, поскольку они предназначены для разных целей.

person Lukazoid    schedule 02.02.2012