2011-08-25 35 views
0

我有一個組件ObjectHolder,它擴展了UIComponent,它包含許多子項UIComponents。但是,在使用addChild()將這些孩子添加到ObjectHolder後,其寬度和高度保持爲零。 UIComponent是否可以自動擴展到其包含的子組件的大小?Flex 4在調用addChild後,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

要更改組件的大小,您應該implement measure() method。但你也應該遵循其他recommendations on creating custom components。在你的情況下,你應該在createChildren() method中創建並添加子組件。

+0

組件不會自行調整大小。實現measure()方法僅通過measuredHeight和measuredWidth屬性向組件父容器提供「建議」。不過,大多數默認的Flex容器都會遵守這些尺寸。 – JeffryHouser

+0

我閱讀了有關measure()方法的內容,但不是在調用addChild()後立即調用它。由於組件是動態添加的,我不能真正重寫createChildren()方法。 – peter

+0

@ www.Flextras.com:我沒有使用Flex容器,「容器」是一個UIComponent。 Flex容器是否自動擴展到包含子容器的大小? 「容器」UIComponent是一個Floorplan網格,因此用戶基本上可以動態地將對象添加到「底層」(類似於在Photoshop畫布中添加圖像和形狀) – peter

1

UIComponent是否可以自動擴展爲包含其子組件的大小 ?

正式答案是否定的。組件從不負責設置它自己的高度和寬度值;它只負責根據該組件的父級設置的值確定其子級的大小和位置。

如果您在組件中實施measure()方法,則可以使用它來設置組件的measuredWidth和measuredHeight。實質上,這將建議您向父母的容器提供什麼樣的理想尺寸,以便正確定位和調整所有子元素的大小。應根據傳入的unscaledWidth和unscaledHeight值,將自己的組件的大小和位置放入updateDisplayList()。

大多數情況下,Flex默認容器將遵守這些大小值;雖然有些情況下他們不會。例如,如果子容器需要的大小大於父容器的大小。

相關問題