WPF-Window Topmost только для собственного применения?

Splashscreen/Loading-Window в моем приложении WPF имеет значение Topmost = "True". Теперь это окно поверх всех других окон, даже когда вы переключаетесь на другое приложение (потому что загрузка займет некоторое время). Я не хочу такого поведения.

Если я установлю Topmost="False", окно будет совсем не верхним. Но если вы вернетесь к моему приложению после работы с другим приложением, мои клиенты иногда не осознают, что загрузка Windows все еще работает. Приложение не отвечает, потому что окно загрузки в фоновом режиме остается активным окном и является модальным.

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

3 ответа

Решение

Вы можете попробовать использовать свойство "Владелец" окна, при этом заставка всегда будет перекрывать другие окна.

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

  1. Показать MainWindow пустые или пустые кости (пустые поля / сетка и т. Д.)
  2. Запустите асинхронный метод загрузки, чтобы получить данные и заполнить главное окно.
  3. Создать заставку, установить владельца на себя и показать
  4. не забудьте закрыть заставку после завершения загрузки.

это должно держать всплеск на вершине во время обработки нагрузки.

Чтобы уточнить, я отвечу на этот вопрос:

Ответ Мартина Мозера правильный.

Установите свойство владельца, например:

      secondarywindow.Owner = parent;

И установите для TopMost значение false.

Другие вопросы по тегам