Как закрыть всплывающие окна, используемые в качестве подменю в WPF - PullRequest
3 голосов
/ 15 мая 2009

У меня есть кнопка, которая при нажатии открывает всплывающее окно. Popup - это подменю, содержащее больше кнопок. При нажатии одной из кнопок в подменю всплывающее окно закрывается. Я также хочу, чтобы всплывающее окно закрывалось, когда пользователь щелкает где-то вне всплывающего окна. Также важно отметить, что большую часть экрана занимает WindowsFormsHost, который отображает элемент управления OpenGL Win Forms.

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

Вещи, которые я пробовал:

Установка PopUp.StaysOpen в false. Это работает в том, что при нажатии в другом месте на экране всплывающее окно закрывается. Однако в элементе управления Win Forms, кажется, требуется щелчок, чтобы закрыть всплывающее окно, а затем второй щелчок, чтобы выполнить какое-либо действие. Это очень нежелательно.

Я пытался обработать событие LostFocus для кнопки, которая открывает всплывающее окно, и для параметра StaysOpen установлено значение true. Это работает в том, что отключение всплывающего окна не требует второго нажатия на элемент управления Win Forms. Теперь проблема в том, что событие LostFocus обрабатывается, и всплывающее окно закрывается, прежде чем оно прочитает щелчок по любой кнопке во всплывающем окне. Это делает подменю непригодным для использования.

1 Ответ

1 голос
/ 01 сентября 2009

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

При переключении фокуса между WinForms и WPF, держу пари, есть некоторые события, которые не запускаются должным образом.

Предлагаемое исправление - переопределить событие WndProc или Click окна WinForms и вручную установить для IsOpen значение false в всплывающем окне.

Я ожидаю, что это единственное, что исправит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...