メイン ウィンドウを作成する前にスプラッシュ スクリーンが表示されるアプリケーションがあります。スプラッシュ画面が表示されている間にユーザーが別のアプリケーションにフォーカスした場合、メインウィンドウが作成されたときにフォーカスを盗むのを避けたいです。
私のアプリケーションの起動は次のようになります。
private void Application_Startup(object sender, StartupEventArgs e)
{
SplashScreenService.Start();
// Initializing stuff...
...
// Ready to open the main window.
MainWindow mainWindow = MainWindow();
mainWindow.ShowActivated = SplashScreenService.HasFocus();
mainWindow.ShowDialog();
}
メイン ウィンドウがアクティブにならないように、スプラッシュ スクリーンがフォーカスを失った場合にのみ に設定Window.ShowActivated
します。false
ただし、これにより例外が発生します。
InvalidOperationException: ShowActivated が false で、WindowState が Maximized に設定されている場合、ウィンドウを表示できません。
実際、私の MainWindow は(以前のセッション設定から復元された)WindowState
に設定します。Maximized
機能にこのような制限がある理由がわかりませんShowActivated
。この問題に関するドキュメントは見つかりませんでした。
When is falseを強制しようとしWindowState
ましNormal
たShowActivated
が、例外は防止されますが、ウィンドウもアクティブになります! ウィンドウの状態を変更すると、実際にアクティベーションが発生するのでしょうか?
これを回避するために使用できるトリックはありますか? メイン ウィンドウを最大化された状態に戻したいのですが、スプラッシュ スクリーン中にユーザーがアプリからフォーカスを外した場合に、メイン ウィンドウが他のアプリケーションからフォーカスを奪わないようにしたいと考えています。