У меня есть приложение, в котором перед созданием главного окна отображается заставка. Я хочу, чтобы главное окно не скрывало фокус, когда оно создается, если пользователь сфокусировал другое приложение во время показа заставки.
Запуск моего приложения выглядит следующим образом:
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: Невозможно отобразить Window, если ShowActivation имеет значение false, а WindowState установлено в значение Maximized.
Действительно, мое MainWindow устанавливает WindowState
в Maximized
(восстановлено из настроек предыдущего сеанса). Я не понимаю, почему существует такое ограничение с функцией ShowActivated
. Я не смог найти документацию по этой проблеме.
Я пытался принудительно установить WindowState
на Normal
, когда ShowActivated
ложно, и это предотвращает исключение, но также активирует окно! Может быть, изменение состояния окна действительно вызывает активацию?
Есть ли уловка, которую я могу использовать, чтобы обойти это? Я хочу восстановить главное окно в развернутом состоянии и не заставлять главное окно скрывать фокус от других приложений, если пользователь сфокусировался на моем приложении во время заставки.