apache-flex - Flex 弹出窗口管理器,在弹出窗口外按下鼠标可删除弹出窗口

标签 apache-flex actionscript mxml

如果您通过以下方式创建弹出窗口:

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

它将创建一个弹出窗口并将其置于任何其他视觉片段之上。不过我有一个问题。即使用户与后台交互,此“弹出窗口”也需要保持打开状态。

我会使用模态,但我需要与背面交互的能力。有什么方法可以告诉弹出窗口管理器在用户单击弹出窗口时不要删除弹出窗口吗?

谢谢!

最佳答案

这里有一个帮助器类可以帮助您(仅在 Flex 4 中测试,但可能也可以针对 Flex 3 进行更改):

导入 flash.display.DisplayObject;
导入 flash.events.Event;
导入 flash.events.MouseEvent;

导入 mx.core.mx_internal;
导入 mx.managers.ISystemManager;
导入 mx.managers.systemClasses.ActiveWindowManager;

使用命名空间 mx_internal;

公共(public)类 PopupHelper
{
    私有(private)变量弹出:DisplayObject;
    私有(private) var systemManager : ISystemManager;
    公共(public)函数 PopupHelper(popup : DisplayObject, systemManager : ISystemManager) : void
    {
        this.popup = 弹出窗口;
        this.systemManager = 系统管理器;
    }
    公共(public)函数forceToFront():无效
    {
        systemManager.addEventListener(MouseEvent.MOUSE_DOWN, onSystemMouseDown);
        popup.addEventListener(Event.REMOVED_FROM_STAGE, onPopupRemoved)
    }
    私有(private)函数 onSystemMouseDown(e : MouseEvent) : void
    {
        BringToFront(弹出窗口);
    }
    私有(private)函数 onPopupRemoved(e : 事件) : void
    {
        popup.removeEventListener(Event.REMOVED, onPopupRemoved);
        systemManager.removeEventListener(MouseEvent.MOUSE_DOWN, onSystemMouseDown);
    }
    私有(private)函数 BringToFront(popup : DisplayObject) : void
    {
        var windowManager : ActiveWindowManager = systemManager.getImplementation("mx.managers::IActiveWindowManager") as ActiveWindowManager;
        var index : int = systemManager.getChildIndex(popup);
        var newIndex : int = 索引;
        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) > 索引)
                    newIndex = Math.max(systemManager.getChildIndex(f), newIndex);
        }
        if (newIndex > 索引)
        {
            systemManager.setChildIndex(popup, newIndex);
        }
    }
}

这是一个测试示例:

 import helperClasses.PopupHelper;
        导入 mx.managers.PopUpManager;

        导入spark.components.TitleWindow;

        公共(public)函数 showPopup() : void
        {
            var popup1 : TitleWindow = new TitleWindow();
            popup1.title = "弹出窗口 1";
            新的 PopupHelper(popup1, systemManager).forceToFront();
            var popup2 : TitleWindow = new TitleWindow();
            popup2.title = "弹出窗口 2";
            PopUpManager.addPopUp(popup1, this, false);
            PopUpManager.addPopUp(popup2, this, false);
            PopUpManager.bringToFront(popup1);
            弹出1.x = 20;
            弹出1.y = 20;
        }

关于apache-flex - Flex 弹出窗口管理器,在弹出窗口外按下鼠标可删除弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195570/

相关文章:

asp.net - 在浏览器中调试 Flex/Flash

actionscript-3 - AS3 引用当前函数

apache-flex - 这是在 mxml 中调用组件方法的正确方法吗

apache-flex - 检测客户端屏幕分辨率

apache-flex - Flex中数据管理的基本原理

actionscript-3 - 带有 DELETE 方法的 URLRequest

php - ActionScript从php加载外部声音文件,并从php响应中找出实际的文件名?

javascript - 弹性 : make height of SWF == height of content?

apache-flex - 如何设置 s :BitmapFill dynamically? 的来源(Flash Builder,内部代码)

css - 我在这里需要什么 CSS 选择器?