我想創建一個MXML容器組件,它有一些自己的chrome - 一個標準的查詢顯示等等,並支持添加子組件。與現有的mx:Panel類非常相似,其中包含一個標題標籤,但其行爲類似於純粹的mx:Box,用於添加子項。在Flex中創建可擴展自定義容器的最簡單方法是什麼?
這樣做最簡單的方法是什麼?
編輯:
要清楚,我希望能夠延長使用MXML容器,所以「多視兒童」問題是相關的。
我想創建一個MXML容器組件,它有一些自己的chrome - 一個標準的查詢顯示等等,並支持添加子組件。與現有的mx:Panel類非常相似,其中包含一個標題標籤,但其行爲類似於純粹的mx:Box,用於添加子項。在Flex中創建可擴展自定義容器的最簡單方法是什麼?
這樣做最簡單的方法是什麼?
編輯:
要清楚,我希望能夠延長使用MXML容器,所以「多視兒童」問題是相關的。
擴展容器並添加標題標籤。 <mx:Canvas/>
可能會在這裏工作。使標題爲公共變體,幷包含標籤的styleName的變體。
然後覆蓋addChild()
方法,以便將添加的任何子代碼添加到該容器中。
離開你的標題足夠的空間,當你的位置你框元素(即給其y屬性足夠的空間。如果沒有標題,你可能想收回空間。
這是基礎。自定義您的心臟的內容
編輯添加:我這樣做首先創建一個ActionScript類,擴展我定位的容器,然後添加「傢俱」 - 類將永遠使用的項目,如標題在您的案例 - 通過重寫createChildren
,並且打電話super.addChild(item)
。從那時起調用addChild
,即使在MXML標記,將項目添加到內部容器。
我們這樣做的狀態。
我們將基礎容器的chrome放在一個狀態(在mx:AddChild元素中),然後在創建控件時使用initialize事件切換到該狀態。所有的鉻然後被添加到容器中。
得到了多組視覺兒童問題。
這種方法的缺點是:
編輯基地的後代時,你看不到的鑲邊。
你不能直接從後代組件訪問父鉻控件它們不存在在編譯時(而不是,您需要定義的基礎上的屬性,方法或事件的後代可以訪問)
但是,它對我們很好。
我不相信這是有效的,至少如果你想用mxml指定你的孩子,你會得到「爲這個容器錯誤指定了多組可視化的孩子」。 – quoo 2010-04-21 15:28:20
@quoo:當然,如果你做得對,它是有效的。我一直這樣做。你可以忽略override中的super.addChild()行。但是,謝謝你的駕駛。 – Robusto 2010-04-21 16:37:40
好的,我應該澄清,如果您在MXML中使用子級定義您的自定義組件,然後嘗試在創建它的實例時向該組件添加更多mxml子級,則這不起作用。這不是一個非常實用的解決方案。 – quoo 2010-04-21 18:21:10