Flex: как вывести компонент в центр видимой области пользователя? - PullRequest
1 голос
/ 14 февраля 2011

Предположим, у меня есть приложение, размеры которого больше разрешения экрана пользователя. Обычно при добавлении всплывающего окна я бы назвал popupManager.addPopup(), а затем popupManager.centerPopup(), но это может привести к добавлению всплывающего окна за пределы видимой области пользователя на экране.

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

EDIT: Вот быстрый пример:

<?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>

Пример 1:

+==========================+---------------------+
|      Viewable Area       |                     |
|                          |                     |
|     +-------------+      |                     |
|     |  I want the |      |                     |
|     |   popup to  |      |                     |
|     |   go here.  |      |                     |
|     +-------------+      |                     |
|                          |                     |
|                          |                     |
+==========================+                     |
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                                                |
|                                                |
+------------------------------------------------+

Пример 2:

+------------------------------------------------+
|                                                |
|                Rest of Application             |
|                                                |
|                                                |
|                +===========================+   |
|                |       Viewable Area       |   |
|                |                           |   |
|                |      +-------------+      |   |
|                |      |  I want the |      |   |
|                |      |   popup to  |      |   |
|                |      |   go here.  |      |   |
|                |      +-------------+      |   |
|                |                           |   |
|                |                           |   |
|                +===========================+   |
|                                                |
+------------------------------------------------+

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

centerPopUp() использует объект parent, который передается в addPopUp() или createPopUp() в качестве ссылки для центрирования всплывающего окна. Если parent является приложением, то оно должно быть уже отцентрировано на основе width и height приложения - что такое «видимая область» с точки зрения Flex.

Поэтому попробуйте передать объект приложения в качестве аргумента parent в addPopUp() или createPopUp()

1 голос
/ 15 февраля 2011

Вы можете вычислить его вручную, используя свойства stageWidth и stageHeight свойства stage:

dlg.x = (this.stage.stageWidth / 2) - (dlg.width / 2);
dlg.y = (this.stage.stageHeight / 2) - (dlg.height / 2);

Возможно, существует более «правильный» способ получения размеров видимой области, но я обнаружил, что это делает работу.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Исправлена ​​моя неправильная информация:)

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