How can I use Window.ShowActivated = false with Maximized window?
- by Anthony Brien
I have an application that has a splash screen shown before I create my main window. I want to avoid the main window stealing the focus when it gets created if the user has focused another application while the splash screen was shown.
My application's startup looks like this:
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();
}
To prevent the main window from getting activated, I'm setting Window.ShowActivated to false, only if the splash screen has lost the focus. But this causes an exception:
InvalidOperationException: Cannot show Window when ShowActivated is false and WindowState is set to Maximized.
Indeed, my MainWindow sets the WindowState to Maximized (restored from previous session settings). I don't understand why there is such a limitation with the ShowActivated feature. I couldn't find any documentation about this issue.
I tried forcing WindowState to Normal when ShowActivated is false, and it prevents the exception, but it also activates the window! Maybe changing the window state actually causes an activation?
Is there a trick I can use to work around this? I want to restore my main window in a maximized state, and not have the main window steal focus away from other applications if the user has focused away from my app during the splash screen.