Flex - Воспроизведите эффект изменения размера на родительском элементе, прежде чем добавить к нему дочерний элемент - PullRequest
0 голосов
/ 19 апреля 2010

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

Мой вопрос:

Если я поместил две кнопки внутри HBox прямо под тегом addChild, он будет работать нормально. Однако, если я создам новый компонент с тем же кодом (HBox с двумя кнопками в нем), а затем добавлю новый компонент на панель (Comp в коде прокомментирован), он не будет отображать эффект изменения размера.

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

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

    <mx:Script>
        <![CDATA[
            protected function button1_clickHandler(event:MouseEvent):void
            {
                currentState="State2";
            }
        ]]>
    </mx:Script>

    <mx:transitions>
        <mx:Transition>
            <mx:Sequence targets="{[comp,panel1]}">
                <mx:Resize target="{panel1}" />
                <mx:AddChildAction />
            </mx:Sequence>
        </mx:Transition>
    </mx:transitions>

    <mx:states>
        <mx:State name="State2">
            <mx:AddChild relativeTo="{panel1}" position="lastChild">
                <mx:HBox id="comp">
                    <mx:Button label="B" />
                    <mx:Button label="C" />
                </mx:HBox>
                <!--<local:Comp id="comp" />-->
            </mx:AddChild>

        </mx:State>
    </mx:states>

    <mx:Panel layout="horizontal" borderThickness="1" borderStyle="solid" id="panel1" title="AB">
        <mx:Button label="A" click="button1_clickHandler(event)"/>
    </mx:Panel>
</mx:Application>

1 Ответ

0 голосов
/ 19 апреля 2010

Я думаю, <mx:AddChild> тег может обрабатывать только один компонент за раз.

Вы получите приятный эффект изменения размера, если разделите пользовательский компонент на другой тег <mx:AddChild>, как показано в коде ниже:

<mx:AddChild relativeTo="{panel1}" position="lastChild">
      <mx:HBox id="comp">
           <mx:Button label="B" />
           <mx:Button label="C" />
           <!-- Don't put your custom component here. --> 
      </mx:HBox>
</mx:AddChild> 
<!-- Use separated AddChild. Still add to same relativeTo object  -->           
<mx:AddChild relativeTo="{panel1}" position="lastChild">
     <local:Comp id="comp2" />
</mx:AddChild>

Надеюсь, ты получил то, что хотел.

...