Как предотвратить закрытие окна с помощью клавиши Enter , пока фокус находится в редактируемом элементе управления?
Обычно я делаю Cancel с IsCancel=True
и Ok с IsDefault=True
. Это связано с тем, что пользователи могут закрыть диалоговое окно с Введите как OK и Esc как Отмена.
Однако проблема заключается в нажатии клавиши Enter , закрывающей диалоговое окно, даже если фокус клавиатуры находится в редактируемом элементе управления, например TextBox
.
Наилучшее поведение - нажатие клавиши Enter закрывает диалог, только когда фокус клавиатуры не находится в редактируемом элементе управления. Но двойное нажатие клавиши Enter должно закрыть диалоговое окно. В противном случае пользователям необходимо изменить фокус клавиатуры на другой нередактируемый элемент управления, чтобы закрыть его клавишей Enter .
Итак, в качестве обходного пути я реализовал так:
- Перехват
KeyDown
события и проверки
если это Введите ключ.
- Если это так, проверьте, находится ли фокус клавиатуры
на кнопку Ok.
- Если это так, закрывает диалог с помощью Ok
кнопка. В противном случае измените
Фокус клавиатуры на кнопку ОК. Итак, дважды нажмите Enter , чтобы закрыть диалоговое окно.
Это имеет проблему, потому что первый Enter изменит фокус на кнопку Ok, поэтому, если фокус не на кнопке Ok, пользователям нужно дважды нажать Enter . Это мало отличается от идеального поведения. Кроме того, мне нужно реализовать эту логику для каждого диалога.
У кого-нибудь есть хорошая идея, чтобы решить эту проблему?