2009-05-15 2 views
3

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

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

Что я пробовал:

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

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

ответ

1

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

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

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

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

Смежные вопросы