调用addChild后,Flex 4 UIComponent的宽度和高度保持为零

时间:2011-08-25 14:24:41

标签: flex actionscript-3 uicomponents addchild

我有一个ObjectHolder组件扩展UIComponent,其中包含许多孩子UIComponents。但是,使用addChild()将这些子项添加到ObjectHolder后,其宽度和高度保持为零。 UIComponent是否可以自动扩展到包含子组件的大小?

public class ObjectHolder extends UIComponent
{       
    public function ObjectHolder()
    {
        var c1:UIComponent = new UIComponent();
        c1.graphics.beginFill( 0xffffff );
        c1.graphics.drawRect(0, 0, 100, 100);
        addChild( c1 );
        trace( this.width );  // Displays zero
    }
}

2 个答案:

答案 0 :(得分:2)

要更改组件的大小,您应该implement measure() method。但你也应该关注其他recommendations on creating custom components。在您的情况下,您应该在createChildren() method中创建和添加子组件。

答案 1 :(得分:1)

  

UIComponent是否可以自动扩展到该大小   它含有儿童成分?

正式答案是否定的。组件永远不负责设置它自己的高度和宽度值;它只负责根据该组件的父级设置的值来确定其子级的大小和位置。

如果在组件中实现measure()方法,则可以使用它来设置组件的measuredWidth和measuredHeight。从本质上讲,这将是一个建议,即您向父母的容器提供正确定位和调整所有子元素所需的理想大小。您自己的组件应根据传入的unscaledWidth和unscaledHeight值在updateDisplayList()中调整大小和位置。

大多数情况下,Flex默认容器将遵循这些大小调整值;虽然有些情况他们不会。例如,如果子容器所需的大小超过父容器的大小。