Проблема позиционирования / прокрутки во всплывающем окне Flex - PullRequest
1 голос
/ 09 апреля 2010

Я пытаюсь решить конкретную проблему с позиционированием во Flex с использованием PopUpManager. В основном я хочу создать всплывающее окно, которое будет прокручиваться с родительским контейнером - это необходимо, потому что родительский контейнер большой и если окно браузера пользователя недостаточно велико (это будет иметь место в большинстве случаев) - им придется использовать полосу прокрутки контейнера, чтобы прокрутить вниз. Проблема в том, что всплывающее окно расположено относительно другого компонента, и оно должно находиться рядом с этим компонентом.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

  <mx:Script>
    <![CDATA[
      import mx.core.UITextField;
      import mx.containers.TitleWindow;
      import mx.managers.PopUpManager;

      private function clickeroo(event:MouseEvent):void {
        var popup:TitleWindow = new TitleWindow();
        popup.width = 250;
        popup.height = 300;

        popup.title = "Example";
        var tf:UITextField = new UITextField();
        tf.wordWrap = true;
        tf.width = popup.width - 30;
        tf.text = "This window stays put and doesn't scroll when the hbox is scrolled (even with using the hbox as parent in the addPopUp method), I need the popup to be local to the HBox.";
        popup.addChild(tf);

        PopUpManager.addPopUp(popup, hbox, false);
        PopUpManager.centerPopUp(popup);
      }
    ]]>
  </mx:Script>

  <mx:HBox width="100%" height="2000" id="hbox">
    <mx:Button label="Click Me" click="clickeroo(event)"/>
  </mx:HBox>

</mx:Application>

Может ли кто-нибудь дать мне указатели в правильном направлении? Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2010

PopUpManager добавляет еще один слой, который не зависит от исходного приложения.
Поэтому вы, вероятно, не хотите использовать PopUpManager, если хотите, чтобы он оставался относительно первого слоя. Вы можете просто использовать TitleWindow поверх Canvas.

Возможно, вы имели это:

<mx:Application creationComplete="createPopup()">
    <mx:Script>
        <![CDATA[
            public var popupPanel:TitleWindow = new TitleWindow();

            private function createPopup():void
            {
                PopUpManager.addPopUp(popupPanel, myApp, true);
                PopUpManager.centerPopUp(popupPanel);
            }
        ]]>
    </mx:Script>

    <mx:Canvas id="myApp" width="100%" height="2000" />
</mx:Application>

Но вместо этого вы захотите попробовать что-то вроде этого:

<mx:Application creationComplete="createPopup()">
    <mx:Script>
        <![CDATA[
            public var popupPanel:TitleWindow = new TitleWindow();

            private function createPopup():void
            {
                // Assuming MyApplication extends Canvas
                (myApp as Canvas).addChild(popupPanel);
                popupPanel.x = myApp.width/2;
                popupPanel.y = myApp.height/2;
            }
        ]]>
    </mx:Script>

    <mx:Canvas id="myApp" width="100%" height="2000" />
</mx:Application>

Вам нужно будет решить для себя, какие наилучшие значения x, y для вашего приложения.

Если вы также хотите сделать перетаскиваемый / перемещаемый объект TitleWindow, вы можете сделать это с помощью функции Sprite.startDrag ().

Дайте мне знать, если это поможет!

2 голосов
/ 09 апреля 2010

Вы вызываете "centerPopup", который победит второй аргумент в addPopup. Согласно документам Adobe, centerPopup "центрирует всплывающее окно поверх любого окна, использованного при вызове метода createPopUp () или addPopUp ()."

0 голосов
/ 29 сентября 2011

Нашел этот пост при поиске такой же проблемы в гугле.Я нашел два решения на другом сайте.Вот они:

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

Полная статья и код

второе решение чище:

По сути, я накладываю холст поверх моих всплывающих компонентов VBox и «addChild» на холст (НЕ используя popupmanager) и прокручиваю холст вместе с VBox.Установка свойства isPopup всплывающего компонента позволяет мне перетаскивать компонент так, как вы можете создать настоящее всплывающее окно.

Полный текст статьи и код

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