WPFでウインドウにフォーカスが当たらない

月曜日 , 28, 12月 2020 Leave a comment

WPFで、あるウインドウから子ウインドウを開き、子ウインドウが閉じたときに元のウインドウにフォーカスが戻らないという現象に遭遇しました。

この現象をネットを検索してみると以前からある問題のようでいろいろな解決方法が提案されていました。
その中からいくつかの方法を試してみたのですが、残念ながら期待通りに動きませんでした。

自分が試してみてうまく機能した方法を紹介します。

public void ForceActivate()
{
	this.Activate();

	System.Threading.Tasks.Task.Run(async () =>
	{
		await System.Threading.Tasks.Task.Delay(100);
		Dispatcher.Invoke(() => this.Focus());
	});
}

Task.Delayメソッドを使って処理をずらすよう工夫したのが効いているようです。
最初はDispatcher.Invokeメソッドのアクションデリゲート内で定番のTopmostプロパティをtrue、falseの順に設定するなども含めていたのですが、ディレイをかけてFocusメソッドを呼び出すだけで良いようです。

Tags:, , ,

Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください