Событие creationComplete не показывает правильную высоту и ширину - PullRequest
0 голосов
/ 27 апреля 2011

У меня проблема с тем, что при использовании MXML свойства myBox по высоте и ширине корректно получаются, но при использовании ActionScript полученные значения правильной высоты и ширины не верны.

my: Tab расширяет NavigatorContent (это НЕ вкладка в панели вкладок)
com: myBox расширяет BorderContainer.

<mx:ViewStack id="viewstack_main" width="100%" height="100%" creationPolicy="all">                          
 <my:Tab label="My Tab">     
     <s:Scroller  height="100%" width="100%">
     <s:Group height="100%" width="100%">            
        <com:myBox>                                 
        </com:myBox>        
     </s:Group>
     </s:Scroller>       
 </my:Tab>     
</mx:ViewStack>

В конструкторе из myBox Я установил percentWidth и percentHeight на 100.

В событии creationComplete того же myBox мне нужно получить доступ к height и width.

Это нормально работает с MXML.

Однако, используя ActionScript, мне нужно добавить еще одну вкладку.

var navContainer:Tab = new Tab();
viewstack_main.addElement(navContainer);

var scroller:Scroller = new Scroller();
scroller.percentHeight = 100;
scroller.percentWidth = 100;
navContainer.addElement(scroller);

var grp:Group = new Group();                
grp.percentHeight = 100;
grp.percentWidth = 100;             
scroller.viewport = grp;        

var box:myBox = new myBox();                
grp.addElement(box);

Но, к сожалению, в событии creationComplete box,свойства высоты и ширины НЕ соответствуют ожидаемым (высота и ширина после установки 100%).Это 112.

Есть идеи, почему это работает с MXML, но НЕ с ActionScript?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Обращаясь к последовательности инициализации во Flex в тот момент, когда box инициализируется с помощью creationComplete, родительские компоненты еще не полностью инициализированы.В вашей ситуации лучше переопределить protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void и использовать реальный размер оттуда.

0 голосов
/ 30 апреля 2011

Ответ был прост.Все, что мне нужно было сделать, это позвонить validateSize(false), прежде чем запрашивать высоту и ширину.

...