Ответ 1
MSDN содержит обзор фокуса, но я попытаюсь объяснить его здесь.
WPF имеет 2 концепции фокусировки. Есть физический фокус клавиатуры, и есть логический фокус. Только один элемент может иметь фокус клавиатуры (и если приложение не является активным приложением, ни один элемент не будет иметь фокус клавиатуры).
Несколько элементов могут иметь логическую фокусировку. Фактически, вы можете создавать новые "области фокусировки". Согласно MSDN:
Когда фокус фокусировки покидает фокус, сфокусированный элемент потеряет фокус клавиатуры, но сохранит логический фокус. Когда фокус клавиатуры возвращается в область фокусировки, сфокусированный элемент получит фокус клавиатуры. Это позволяет изменять фокус клавиатуры между несколькими областями фокусировки, но гарантирует, что фокусированный элемент в области фокусировки восстанавливает фокус клавиатуры, когда фокус возвращается в область фокусировки.
Вы можете определить свою собственную область фокусировки для элемента (обычно Panel
), установив FocusManager.IsFocusScope="True"
. Элементы управления в WPF, которые по умолчанию являются областями фокусировки, это Window
, MenuItem
, ToolBar
и ContextMenu
.
Это имеет смысл, если вы думаете о наличии в приложении нескольких Window
. Когда вы Alt-Tab
между ними, вы ожидаете, что фокус вашей клавиатуры вернется к тому же месту, когда последний раз Window
имел фокус. Сохраняя фокус клавиатуры и логический фокус отдельно, вы можете достичь этого.