Как мне предотвратить закрытие моего всплывающего окна новым дочерним окном?

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

У моего родительского окна Topmost = "True" и оно содержит всплывающее окно (с Placement = "AbsolutePoint"), а также запрос взаимодействия для запуска дочернего окна. В запросе взаимодействия происходит следующее:

  1. Дочернее окно создается с Topmost = "True" и Owner = parentWindow.
  2. Topmost имеет значение false в родительском окне
  3. ShowDialog вызывается для дочернего окна

Всплывающее окно отображается поверх родительского окна, но ниже дочернего окна. Я попытался установить для ChildWindow.Topmost значение «False», но это не помогло.


person Julius    schedule 04.03.2015    source источник
comment
Всплывающее окно отображается поверх родительского окна, но ниже дочернего окна. - Не могли бы вы предоставить скриншот происходящего?   -  person Mike Eason    schedule 04.03.2015
comment
Отображение дочернего окна с использованием метода ShowDialog() означает, что это окно будет модальным для всего приложения, поэтому не должно быть другого окна, которое было бы поверх него. Вам нужно сделать дочернее окно модальным?   -  person dymanoid    schedule 04.03.2015
comment
@Mike Eason - Мне нужно будет предоставить снимок экрана, когда я вернусь домой, но представьте себе этот z-порядок: ParentWindow, Popup, ChildWindow (с ChildWindow на переднем плане, поверх всего)   -  person Julius    schedule 04.03.2015
comment
@dymanoid - Интересный момент. Мне бы хотелось, чтобы между моими окнами была модальная связь, но я попробую запустить дочернее окно в немодальном режиме и доложу. Спасибо.   -  person Julius    schedule 04.03.2015
comment
Вопрос: что вы пытаетесь сделать? Всплывающие окна - это похожие на меню окна, принадлежащие родительскому окну (это как часть окна). Windows, в свою очередь, является объектом, которым управляет ОС (z-порядок, позиционирование, отношения модально-родительские, alt-tab и т. Д.). Если вы используете интерфейс, подобный MDI, то всплывающее окно будет работать правильно (потому что в этом случае дочерние окна являются частью самого родительского окна, и всплывающее окно может проецироваться поверх них). Лучше всего предоставить черновик того, что вы пытаетесь сделать.   -  person Sinatr    schedule 04.03.2015
comment
@Sinatr - я использую всплывающее окно для отображения перекрестия, которое отслеживает, куда в данный момент смотрит пользователь (с помощью устройства отслеживания взгляда). Прицел должен находиться над всеми окнами, поэтому я полагаю, вы предлагаете, чтобы это было отдельное окно, поскольку на самом деле оно не принадлежит какому-либо окну в приложении.   -  person Julius    schedule 04.03.2015
comment
Для этой цели окно звучит лучше, чем всплывающее.   -  person Sinatr    schedule 04.03.2015


Ответы (1)


Немного неудовлетворительно, но я собираюсь изменить свой подход так, чтобы использовать 2 всплывающих окна, а не 1 всплывающее окно и 1 дочернее окно, которые должны иметь z-порядок, связанный с порядком их открытия. Это также предотвращает отображение другого окна на панели задач.

Я считаю, что проблема заключается в том, что всплывающие окна - это на самом деле просто окна, и трудно заставить 3 окна хорошо взаимодействовать друг с другом. Я не выяснил, какое свойство / свойства несут ответственность, но это будет некоторая комбинация Topmost, Owner и какое окно в настоящее время активировано, что меня сбивает.

person Julius    schedule 05.03.2015