2011-02-09 13 views
0

flexで標準のDataGridコンポーネントをmxmlで拡張したいと考えています。しかし、コンポーネントの下部にボタンを追加したいと思います。私は次の試みを試してみましたが、うまくいきませんでした...DataGridコンポーネントを拡張してボタンを追加する

私は間違った要素にボタンを追加していますか?

<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(ボタン)を置き換えることでした。 ...

parent.addChild(button);

ありがとうございます!

+1

これがどのようにあなたの質問に答えるか分かりません。これは実際にボタンをDataGridの子として追加しません。あなたの質問の元のコードでは、ActionScriptで子を追加していませんでした。 – JeffryHouser

3

「機能しない」と定義する必要があります。コンパイラのエラーが出ますか?またはランタイムエラー?または、ボタンが表示されないだけですか?私は後者を仮定します。

DataGridには、子を配置またはレイアウトするためのメカニズムがありません。あなたのボタンは、おそらく高さと幅がゼロで、位置0,0にあります。それを効果的に見えなくする。多くのFlexコンテナクラスには、子のサイズを設定したり配置する機能があります。 DataGridはコンテナではなく、そのための組み込みの機能を提供していません。主に、列配列の操作に焦点を当てています。

関数を配置するには、updateDisplayList()をオーバーライドする必要があります。おそらく、途中でcommitProperties()とmeasure()を変更する必要があります。また、新しいボタンに干渉しないように列の位置とサイズを変更する必要があります。物事がプライベートな方法でロックされている場合(それは可能性が高い)、あなたはあまり楽しい時間ではありません。

詳細については、Flex Component LifeCycle methodsを読んでください。さらに、DataGridコードを見て、それが何であるか把握してください。

ボタンとDataGridをコンテナに配置し、そのコンテナをDataGridの内部でボタンレンダリングするのではなく、単一のエンティティとして扱うほうが簡単です。

+0

私は最後の点に同意します。アプリケーションの周りに使用するボタンとデータグリッドを持つコンポーネントが必要な場合は、DataGridを使用するのではなく、両方をカスタムコンポーネントにラップしてください。 –