Holen Sie sich den WPF-Tastaturfokus und stellen Sie ihn wieder her

In einem WPF-Programm möchte ich den aktuellen (Tastatur-) Fokus abrufen, speichern und später neu einstellen.

Um den aktuellen Fokus zu erhalten, benutze ich:

DependencyObject focusScope = FocusManager.GetFocusScope(d);
_lastFocus = FocusManager.GetFocusedElement(focusScope);

Um es später einzustellen, benutze ich:

if (_lastFocus != null)
{
  IInputElement setFocus = _lastFocus;
  _lastFocus = null;
  d.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new ThreadStart(delegate
  {
    FocusManager.SetFocusedElement(d, setFocus);
  }));
}

Das funktioniert einmal. Aber wenn ich es noch einmal versuche, funktioniert es nicht, bis ich das anstößige Dialogfeld, auf das ich den Fokus setzen möchte, neu erstelle, obwohl es genau dasselbe tut (ich habe nachverfolgt, wie ich den Fokus erhalten und gesetzt habe). Stattdessen erhält das Hauptfenster selbst den Fokus.

Ich habe einmal gehört, dass es in WPF zwei Arten von Fokus gibt. Muss ich auch etwas anderes einstellen, um konsistente Ergebnisse zu erzielen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage