2011-04-27 113 views
0

我有一个问题,即使用MXML,myBox的高度和宽度属性被正确获取,但使用ActionScript获取的正确高度和宽度不正确。creationComplete事件不显示正确的高度和宽度

我的标签扩展NavigatorContent(这不是标签栏中的标签)
com:myBox extends 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上构造我设置了percentWidthpercentHeight到两个100

creationComplete事件一样myBox上的,我需要访问heightwidth

这对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事件,高度和宽度属性不被预期的(设置100%后的高度&宽度)。它是112.

任何想法为什么这与MXML,但不是ActionScript的作品?

+0

您是否试图使myBox的显示无效? – 2011-04-27 20:44:10

+0

那是creationComplete之后,是吗? – 2011-04-28 01:58:08

+0

不,它告诉自组织在下一帧重绘对象。 – 2011-04-28 02:30:46

回答

0

答案很简单。在请求高度和宽度之前,我只需要拨打validateSize(false)

1

参考initialization sequence in Flex在您的box初始化为creationComplete时,父组件仍未完全初始化。在你的情况下,最好重写protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void并从那里使用实际大小。

+0

任何想法为什么它能在MXML中完美工作? – 2011-04-27 13:06:10

+0

我不知道没有看到你所有的代码:( – Constantiner 2011-04-27 13:11:56

+0

所以,如果我想获得框的实际高度和宽度,我必须在Tab的creationComplete事件中完成它?我认为creationComplete事件在调整大小后触发一切都完成了,否则我将不得不从孩子那里听父母的creationComplete事件,这是可能的吗? – 2011-04-27 13:30:46