2009-12-04 90 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