Получить и восстановить фокус клавиатуры WPF
В программе WPF я хочу получить текущий (клавиатурный) фокус, сохранить его и переустановить позже.
Чтобы получить текущий фокус прямо сейчас, я использую:
DependencyObject focusScope = FocusManager.GetFocusScope(d);
_lastFocus = FocusManager.GetFocusedElement(focusScope);
Чтобы установить его позже, я использую:
if (_lastFocus != null)
{
IInputElement setFocus = _lastFocus;
_lastFocus = null;
d.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new ThreadStart(delegate
{
FocusManager.SetFocusedElement(d, setFocus);
}));
}
Это работает один раз. Но если я попытаюсь снова, это не сработает, пока я не создаю восстанавливающий диалог, на который я пытаюсь установить фокус, даже если он делает то же самое (я проследил получение и настройку Фокуса). Вместо этого главное окно получает фокус.
Я когда-то слышал, что в WPF есть два вида фокуса, нужно ли мне устанавливать что-то еще, чтобы получить согласованные результаты?