11

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 種類のフォーカスがあると聞いたことがありますが、一貫した結果を得るには別のものも設定する必要がありますか?

4

2 に答える 2