2009-12-04 88 views
2

我將擴展Panel以構建自定義組件。如果不知道稍後會包含什麼內容,我該如何添加一個方法來臨時隱藏所有內容並顯示一個內部對象(通常不可見)?如何在Flex中隱藏(不刪除)面板(或任何容器)的內容?

也就是說,有超過

for each (var ui:DisplayObject in this.getChildren()) { 
    ui.visible = false; 
} 

一個更好的辦法是什麼我希望做的是換出根內容窗格中,但我不知道如何訪問它。就像這樣:

this._tempStore = this.removeChild(this.rootContentPaneObject); 
this.rootContentPaneObject = this._myTemporaryReplacement; 

實際上,我試圖建立充當脫入替換爲Panel一個組成部分,但其行爲類似於一個ViewStack

回答

0

您好像在尋找Container.contentPane。請注意,它是mx_internal,所以我們在這裏潛入Flex內部(風險自負......)。

import mx.core.mx_internal; 
... 
    this.mx_internal::contentPane.visible = false; 

下一個問題是那麼你如何添加它們仍然可見兒童(不contentPane中)。您可能必須使用Container.rawChildren

+0

我也發現挖掘到源代碼,但我寧願避免這條路。通過'rawChildren'添加到chrome(「內部」子項)效果很好,並且有很好的文檔記錄,例如在Safari Books Online上提供的「Flex 3:源代碼培訓」。 – 2009-12-04 18:52:16

1

也許在您的面板中放置一個ViewStack並使用堆棧來顯示/隱藏適當的內容可能會更容易。

+0

是的,這是我的第一個方法,但它開闢了一個全新的蠕蟲罐。這意味着你必須重寫處理子代的所有方法,以將它們委託給使用用戶添加的子組件的'ViewStack'的子代。無論如何,我最終可能會這樣做,但我的第一次嘗試帶來了許多奇怪的錯誤。 – 2009-12-04 18:49:00