Диспетчер всплывающих окон Flex, mousedown вне всплывающего окна удаляет всплывающее окно - PullRequest
3 голосов
/ 04 марта 2011

Если вы создаете всплывающее окно с помощью:

PopUpManager.addPopUp (popup, this, false);PopUpManager.bringToFront (popup);

Это создаст всплывающее окно и поместит его поверх любого другого визуального элемента.У меня есть одна проблема, хотя.Это «всплывающее окно» должно оставаться активным, даже когда пользователь взаимодействует с фоном.

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

Спасибо!

1 Ответ

2 голосов
/ 04 марта 2011

вот вспомогательный класс, который вам поможет (протестирован только во Flex 4, но, вероятно, может быть изменен и для Flex 3):

</p> <pre><code>import flash.display.DisplayObject; import flash.events.Event; import flash.events.MouseEvent; import mx.core.mx_internal; import mx.managers.ISystemManager; import mx.managers.systemClasses.ActiveWindowManager; use namespace mx_internal; public class PopupHelper { private var popup : DisplayObject; private var systemManager : ISystemManager; public function PopupHelper(popup : DisplayObject, systemManager : ISystemManager) : void { this.popup = popup; this.systemManager = systemManager; } public function forceToFront() : void { systemManager.addEventListener(MouseEvent.MOUSE_DOWN, onSystemMouseDown); popup.addEventListener(Event.REMOVED_FROM_STAGE, onPopupRemoved) } private function onSystemMouseDown(e : MouseEvent) : void { bringToFront(popup); } private function onPopupRemoved(e : Event) : void { popup.removeEventListener(Event.REMOVED, onPopupRemoved); systemManager.removeEventListener(MouseEvent.MOUSE_DOWN, onSystemMouseDown); } private function bringToFront(popup : DisplayObject) : void { var windowManager : ActiveWindowManager = systemManager.getImplementation("mx.managers::IActiveWindowManager") as ActiveWindowManager; var index : int = systemManager.getChildIndex(popup); var newIndex : int = index; var n : int = windowManager.forms.length; for (var j : int = 0; j < n; j++) { var f : DisplayObject = windowManager.forms[j]; if (systemManager.contains(f)) if (systemManager.getChildIndex(f) > index) newIndex = Math.max(systemManager.getChildIndex(f), newIndex); } if (newIndex > index) { systemManager.setChildIndex(popup, newIndex); } } }

Вот пример теста:

</p> <pre><code> import helperClasses.PopupHelper; import mx.managers.PopUpManager; import spark.components.TitleWindow; public function showPopup() : void { var popup1 : TitleWindow = new TitleWindow(); popup1.title = "Popup 1"; new PopupHelper(popup1, systemManager).forceToFront(); var popup2 : TitleWindow = new TitleWindow(); popup2.title = "Popup 2"; PopUpManager.addPopUp(popup1, this, false); PopUpManager.addPopUp(popup2, this, false); PopUpManager.bringToFront(popup1); popup1.x = 20; popup1.y = 20; }

...