Получить и восстановить фокус клавиатуры 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 есть два вида фокуса, нужно ли мне устанавливать что-то еще, чтобы получить согласованные результаты?

Ответы на вопрос(2)

Ваш ответ на вопрос