2011-02-09 79 views
0

我想用mxml在flex中擴展標準DataGrid組件。但是我想將按鈕添加到組件的底部。我試圖嘗試以下,但它不工作...擴展DataGrid組件,並向其添加按鈕

我是否將Button添加到錯誤的元素?

<mx:DataGrid xmlns:fx = "http://ns.adobe.com/mxml/2009" 
      xmlns:mx = "library://ns.adobe.com/flex/mx" 
      xmlns:s = "library://ns.adobe.com/flex/spark"> 

    <fx:Script> 
     <![CDATA[ 
      override protected function createChildren():void 
      { 
       super.createChildren(); 

       listContent.addChild(button); 
      } 
     ]]> 
    </fx:Script> 

    <s:Button id="button" label = "asdasdas"/> 
</mx:DataGrid> 

回答

-2

明白了。我需要做的只是替換listContent.addChild(button);與...

parent.addChild(button);

謝謝!

+1

我不明白這是如何回答你的問題的。這實際上不會將該按鈕添加爲DataGrid的子項;並且在你的問題的原始代碼中,你根本沒有在ActionScript中添加子代。 – JeffryHouser 2011-02-10 13:48:49

3

您需要定義「不工作」!你收到編譯器錯誤?還是運行時錯誤?或者是按鈕沒有顯示出來?我會假設後者。

DataGrid沒有任何定位或佈局它的子項的機制。您的按鈕最有可能的高度和寬度爲零,位於位置0,0;使其看不見。許多Flex容器類能夠調整和定位他們的孩子;但DataGrid不是一個容器,也沒有提供內置的功能。它主要側重於處理columns數組。

您將需要重寫updateDisplayList()來定位函數。很可能您需要對方法中的commitProperties()和measure()進行更改。您可能還需要重新設置柱的位置和大小,以免干擾您的新按鈕。如果東西被私人方法鎖定(這很可能),那麼你就處於一個不那麼有趣的時期。

請閱讀Flex Component LifeCycle methods瞭解更多信息,並查看DataGrid代碼以瞭解它的功能。

只需將按鈕和DataGrid放入容器中,並將該容器視爲單個實體,而不是試圖獲取DataGrid中的Button渲染器,您可能會更容易。

+0

我同意最後一點。如果你需要一個帶有按鈕和數據網格的組件來在你的應用程序中使用,將它們都包裝到自定義組件中,而不是用DataGrid搞亂 – 2011-02-09 17:29:34