Как я могу использовать Window.ShowActivation = false с развернутым окном? - PullRequest
2 голосов
/ 08 апреля 2010

У меня есть приложение, в котором перед созданием главного окна отображается заставка. Я хочу, чтобы главное окно не скрывало фокус, когда оно создается, если пользователь сфокусировал другое приложение во время показа заставки.

Запуск моего приложения выглядит следующим образом:

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 ложно, и это предотвращает исключение, но также активирует окно! Может быть, изменение состояния окна действительно вызывает активацию?

Есть ли уловка, которую я могу использовать, чтобы обойти это? Я хочу восстановить главное окно в развернутом состоянии и не заставлять главное окно скрывать фокус от других приложений, если пользователь сфокусировался на моем приложении во время заставки.

1 Ответ

0 голосов
/ 19 мая 2010

У меня тоже была эта проблема.

Первым делом я попытался повторно активировать главное окно после создания и отображения заставки. Это вернуло активацию в главное окно и сработало, но это не выглядело очень элегантно.

Лучшее решение - не устанавливать WindowState на заставке для максимизации, вместо этого вручную максимизируйте заставку, чтобы охватить весь экран с помощью взаимодействия и форм Windows, как описано здесь:

http://www.inveigledsoftware.com/2009/07/maximizing-a-wpf-window-with-windowstatenone/

...