Apache flex Flex:如何在用户中心弹出组件';什么是可视区域?

Apache flex Flex:如何在用户中心弹出组件';什么是可视区域?,apache-flex,actionscript-3,popup,Apache Flex,Actionscript 3,Popup,假设我有一个应用程序,其尺寸大于用户的屏幕分辨率。通常,在添加弹出窗口时,我会调用popupManager.addPopup(),然后调用popupManager.centerPopup(),但这可能会导致将弹出窗口添加到用户在屏幕上的可见区域之外 有没有办法在用户当前的可视区域中间添加一个弹出窗口? 编辑: 下面是一个简单的例子: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns

假设我有一个应用程序,其尺寸大于用户的屏幕分辨率。通常,在添加弹出窗口时,我会调用
popupManager.addPopup()
,然后调用
popupManager.centerPopup()
,但这可能会导致将弹出窗口添加到用户在屏幕上的可见区域之外

有没有办法在用户当前的可视区域中间添加一个弹出窗口? 编辑: 下面是一个简单的例子:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               width="3000" height="2000" 
               creationComplete="creationCompleteHandler(event)">

  <fx:Script>
    <![CDATA[

      import mx.managers.PopUpManager;          
      import spark.components.TitleWindow;

      public var myWindow:TitleWindow = new TitleWindow;

      protected function creationCompleteHandler(event:FlexEvent):void
      {
        myWindow.title = "My Title Window";
        PopUpManager.addPopUp(myWindow, DisplayObject(FlexGlobals.topLevelApplication), false);
        PopUpManager.centerPopUp(myWindow);
      }

    ]]>
  </fx:Script>

  <s:BorderContainer width="3000" height="2000" backgroundColor="0x000000" />
</s:Application>
示例2:

+==========================+---------------------+
|      Viewable Area       |                     |
|                          |                     |
|     +-------------+      |                     |
|     |  I want the |      |                     |
|     |   popup to  |      |                     |
|     |   go here.  |      |                     |
|     +-------------+      |                     |
|                          |                     |
|                          |                     |
+==========================+                     |
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                                                |
|                                                |
+------------------------------------------------+
+------------------------------------------------+
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                +===========================+   |
|                |       Viewable Area       |   |
|                |                           |   |
|                |      +-------------+      |   |
|                |      |  I want the |      |   |
|                |      |   popup to  |      |   |
|                |      |   go here.  |      |   |
|                |      +-------------+      |   |
|                |                           |   |
|                |                           |   |
|                +===========================+   |
|                                                |
+------------------------------------------------+
centerPopUp()
使用传递给
addPopUp()
createPopUp()
父对象作为弹出窗口居中的参考。如果应用程序是
parent
,那么它应该已经基于应用程序的
宽度和
高度居中,这就是Flex的“可视区域”


因此,尝试将应用程序对象作为
parent
参数传递给
addPopUp()
createPopUp()

您可以使用stage属性的stageWidth和stageHeight属性手动计算它:

dlg.x = (this.stage.stageWidth / 2) - (dlg.width / 2);
dlg.y = (this.stage.stageHeight / 2) - (dlg.height / 2);
可能有一种更“正确”的方法来获取可视区域的尺寸,但我发现这可以完成工作

希望有帮助


编辑:修复了我的mis信息:)

我原以为centerPopUp会将组件放在应用程序可见区域的中心。既然您说“可能导致”而不是“确实导致”,那么您是否有代码证明情况并非如此,或者您只是在为您认为可能发生的事情做准备?您希望相对于应用程序标记的本地坐标将项目居中,但您说它是基于内容坐标居中的。你确定那是对的吗@Flextras,我添加了一个快速代码snippit来演示我所指的问题。感谢您的回复。我添加了一个快速代码snippit,它演示了我所指的问题。希望这有助于更好地解释事情PopUpManager.createPopUp(parentApplication作为DisplayObject,…)可以解决中心问题。@Wade Mueller,我似乎找不到
systemManager
width
height
属性。那些属性在Flex4中存在吗?@Jason,很抱歉,我不知道我在想什么。将我的答案编辑成更有意义的内容:)@Wade Mueller,谢谢您的编辑。不幸的是,在调用
myTitleWindow.move(x,y)之后,弹出窗口仍然会弹出屏幕其中
\ux
\uy
分别是
(this.stage.stageWidth/2)-(dlg.width/2)
(this.stage.stageHeight/2)-(dlg.height/2)
。我没有正确地实现它吗?嗯,在我看来这是正确的。如果我是你,我会先设置断点并逐步完成计算,或者使用跟踪语句查看窗口的x和y值的前后值。@Wade Mueller,以下是使用我上面发布的相同示例的跟踪结果:
移动前:myWindow.x=0,移动后:myWindow.x=1430,myWindow.y=962
。有什么想法吗?