2010-04-09 2 views
1

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

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

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

ответ

2

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

+1

Я ценю помощь, однако удаление вызов centerPopUp не сделал разницу (кроме того, что всплывающее окно не по центру). – user284163

2

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

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

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

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

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

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

+0

Как вы думаете, вы могли бы объяснить это немного больше? Что вы понимаете, используя его поверх холста и используя функцию startDrag()? Я не перетаскиваю все, что я хочу, чтобы всплывающее окно оставалось относительно других элементов прокрутки. – user284163

+0

Я переделал его для дальнейшего объяснения. Ключ отнять здесь - использовать холст (для абсолютного positiong) и использовать addChild(). Позвольте мне знать, если это помогает. –

0

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

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

Full Article and Code

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

В принципе, я наложить холст поверх моей VBox и «AddChild» всплывающих компонентов на холст (не используя PopUpManager) и прокрутите холст вместе с VBox. Установка свойства isPopup компонента popup позволяет мне перетащить компонент, как вы можете создать всплывающее окно true .

Full Article and Code

Смежные вопросы