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