Изменение размера контейнера при изменении видимости ребенка? - PullRequest
1 голос
/ 28 мая 2010

Когда я устанавливаю для свойства visible значение false для дочернего элемента в контейнере, как я могу изменить размер контейнера? В приведенном ниже примере, когда вы нажимаете «Toggle», «containerB» скрывается, но прокручиваемая область основного контейнера не изменяется. (Я не хочу пролистывать много пустого пространства.)

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
    <![CDATA[
        public function toggle():void {
            containerB.visible = !containerB.visible;
        }
    ]]>
</mx:Script>
<mx:VBox height="300" width="200" horizontalAlign="center">
    <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>

Ответы [ 2 ]

2 голосов
/ 28 мая 2010
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
    <![CDATA[
        public function toggle():void {
            containerB.visible = !containerB.visible;
        }
    ]]>
</mx:Script>
<mx:VBox height="300" width="200" horizontalAlign="center">
    <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" includeInLayout="{containerB.visible}">
        <mx:Button label="B" height="400" width="100"/>         
    </mx:VBox>
</mx:VBox>
</mx:Application>

Привет, просто сделайте свойство containerB includeInLayout зависимым от его свойства visible

Я только что добавил includeInLayout = "{containerB.visible}" в списке свойств conatinerB, это работает, я надеюсь, что это то, что вам не понравилось

время gr8

Анкур Шарма

0 голосов
/ 28 мая 2010

Множество способов, я думаю, учитывая ваш текущий код, вы должны прослушать событие 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.

...