Множество способов, я думаю, учитывая ваш текущий код, вы должны прослушать событие show и hide в containerB.
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="creationComplete()">
<mx:Script>
<![CDATA[
public function toggle():void {
containerB.visible = !containerB.visible;
}
public function creationComplete():void{
containerB.addEventListener(FlexEvent.SHOW, onContainerBChange );
containerB.addEventListener(FlexEvent.HIDE, onContainerBChange );
}
public function onContainerBChange():void{
if(this.containerB.visible == true){
this.mainContainer.width = this.containerB.width + this.containerA.width
this.mainContainer.height = this.containerB.height + this.containerA.height
} else {
this.mainContainer.width = this.containerA.width;
this.mainCintainer.height = this.containerA.height;
}
}
]]>
</mx:Script>
<mx:VBox height="300" width="200" horizontalAlign="center" id="mainContainer">
<mx:Button label="Toggle" click="toggle()" width="200"/>
<mx:VBox id="containerA" height="400" width="150" horizontalAlign="center">
<mx:Button label="A" height="400" width="100"/>
</mx:VBox>
<mx:VBox id="containerB" height="400" width="150" horizontalAlign="center">
<mx:Button label="B" height="400" width="100"/>
</mx:VBox>
</mx:VBox>
Я пишу код в браузере, поэтому его следует рассматривать как код psuedo. Большой плюс для вас, если вместо использования кода изменения размера в обработчике onContainerBChange вы аннулируете список отображения и поместите код в updateDisplayList ();
как полный в стороне; Я надеюсь, что ваш реальный код не использует VBox только с контейнером внутри. В этом простом примере нет причины, по которой вы не можете полностью исключить containerA и containerB, а просто имеете три кнопки в VBox.