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種類のフォーカスがあると聞いていましたが、一貫した結果を得るために何か他のものも設定する必要がありますか?
素晴らしい!論理フォーカスを設定するときにKeyboard.Focus(setFocus)を追加しました。これで動作します。ありがとうございました! – Sam
[FocusManager.IsFocusScope](http://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.isfocusscope)を使用すると、キャプチャ/復元コードを完全に削除することができます。 aspx)。 – Olly
* Panelベースクラスなどの一部のクラスでは、デフォルトでFocusableがfalseに設定されています。これが私の鍵でした。 – dotNET