Разница между GotFocus и GotKeyboardFocus
в чем разница(ы) между GotFocus
и GotKeyboardFocus
-аналогично LostFocus
и LostKeyboardFocus
?
извините за простой вопрос, но я погуглил его и прочитал много сообщений в блоге, но я все еще смущен. Кажется, никто точно не знает, в чем разница ):
обновление:
мои действия:
я создаю пользовательский элемент управления, расширяя Control
класса. Что-то вроде ComboBox
но с некоторыми другими эффектами. Я попытка открыть и закрыть Popup
задайте свойства: IsDropDownOpen
как ComboBox
до GotFocus
и LostFocus
событий. Я не хочу Popup
закрыть, когда я Alt+Tab
ed окна, но закрываются, когда я нажимаю на Button
, например, или я иду к TextBox
. Я:
private static void OnGotFocusHandler(object sender, RoutedEventArgs e) {
if (e.Handled)
return;
((SearchBox)sender).IsDropDownOpen = true;
e.Handled = true;
}
private static void OnLostFocusHandler(object sender, RoutedEventArgs e) {
if (e.Handled)
return;
((SearchBox)sender).IsDropDownOpen = false;
e.Handled = true;
}
на GotFocus
строительство. Но ... --17--> один не сделал. Если я сделаю Lost
вещи LostKeyboardFocus
потом, когда я Alt+Tab
Windows или Window
переходит в неактивное, затем вызывается метод, пока я не хочу. Как я могу ее решить?
1 ответов
MSDN имеет обзор фокуса, но я попытаюсь объяснить это здесь.
WPF имеет 2 концепции относительно фокуса. Существует физический фокус клавиатуры, и есть логический фокус. Только один элемент может иметь фокус клавиатуры (и если приложение не является активным приложением, ни один элемент не будет иметь фокус клавиатуры).
несколько элементов могут иметь логический фокус. Фактически, вы можете создать новые "области фокусировки". Согласно MSDN:
когда фокус клавиатуры оставляет область фокусировки, сфокусированный элемент потеряет фокус клавиатуры, но сохранит логический фокус. Когда фокус клавиатуры вернется в область фокуса, сфокусированный элемент получит фокус клавиатуры. Это позволяет изменять фокус клавиатуры между несколькими областями фокусировки, но гарантирует, что сфокусированный элемент в области фокусировки восстанавливает фокус клавиатуры, когда фокус возвращается в область фокусировки.
вы можете определить свою собственную область фокусировки на элементе (обычно Panel
), установив FocusManager.IsFocusScope="True"
. Элементы управления в WPF, что фокус прицелы по умолчанию Window
, MenuItem
, ToolBar
и ContextMenu
.
это имеет смысл, если вы думаете о наличии нескольких Window
в вашем приложении. Когда ты Alt-Tab
между ними вы ожидаете, что ваш фокус клавиатуры вернется в то же место, где он был в последний раз Window
был в фокусе. Сохраняя фокус клавиатуры и логический фокус отдельно, вы можете достичь этого.