Flex 4 динамически изменяет размер родительского контейнера, чтобы содержать дочерние элементы - PullRequest
3 голосов
/ 12 февраля 2010

Существует ли простой способ изменить размер родительского контейнера (например, группы) при изменении размера его дочерних элементов?

Ниже приведен небольшой пример приложения. Когда я кладу 200x200 «пищи» в «желудок», желудок, содержащий 100x100 «тела», должен изменить размер, чтобы вместить пищу.

Есть идеи?

(из этой сущности http://gist.github.com/301292)

<?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/halo"
      minWidth="1024"
      minHeight="768"
      creationComplete="application1_creationCompleteHandler(event)">
 <fx:Script>
  <![CDATA[
   import mx.events.FlexEvent;

   protected function application1_creationCompleteHandler(event:FlexEvent):void {

   }

   protected function eatFoodTrigger_clickHandler(event:MouseEvent):void {
    var food:Border = new Border();
    food.setStyle('backgroundColor', 0x15DCA9);
    food.width = 200;
    food.height = 200;

    stomach.addElement(food);

   }
  ]]>
 </fx:Script>

 <s:Group verticalCenter="0" horizontalCenter="0">
  <s:layout>
   <s:VerticalLayout horizontalAlign="center" />
  </s:layout>

  <s:Label fontSize="24" text="The 100x100 pink/brown body has a stomach inside it.
     Press eat and the stomach gets 200x200 'food' added to it.
     I want the body and the stomach to expand to fit the food." width="200">
  </s:Label>

  <s:Border id="body"
      backgroundColor="0x333333"
      minWidth="100"
      minHeight="100"
      borderColor="0xFF4466"
      borderWeight="5">
   <s:Group id="stomach">
   </s:Group>
  </s:Border>

  <s:Button id="eatFoodTrigger" click="eatFoodTrigger_clickHandler(event)" label="eat" />
 </s:Group>
</s:Application>

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Очевидно, что это слишком поздно, но вы могли бы переопределить метод addElementAt и добавить некоторые функциональные возможности для изменения размера.Ниже вы можете увидеть, как addElementAdd () должен / может быть переопределен.

//This would be placed in a custom component that extends Group. Your stomach would be this component.
override public function addElementAt(element:IVisualElement, index:int):IVisualElement
{
    super.addElementAt(element, index);

    ChangeWatcher.watch(element, "width", function():void{ resizeHandler(element) });
    ChangeWatcher.watch(element, "height", function():void{ resizeHandler(element) });
}

private function resizeHandler(el:IVisualElement):void
{
    var element:DisplayObject = el as DisplayObject;

    //Rest of the resizing code.
}

Я знаю, что это работает для flex3 и Canvas, поэтому он также должен работать с flex4 и Group.

1 голос
/ 12 февраля 2010

Хорошо, это была ошибка в Flex 4 SDK, и она была исправлена. Высокий.

От: http://forums.adobe.com/thread/575252

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

http://opensource.adobe.com/wiki/display/flexsdk/DownloadFlex4

-Ryan

...