2

前述のように、フレックスAdvancedDataGridでアイコンと折り返し可能なテキストで構成される列ヘッダーを取得しようとしています。

編集:コンテキストの重要な部分について言及するのを忘れました:列はactionscriptで動的に追加されます。これにより、動作が明らかに変わります。)

次のように、カスタムmxmlheaderRendererを使用してみました。

<mx:headerRenderer>
    <fx:Component>
        <mx:HBox width="100%"
                 height="100%"
                 verticalAlign="middle">
            <mx:Image source="<image_url>"
                      width="10%"
                      height="100%"/>
            <mx:Text text="{data.headerText}"
                     width="90%"
                     height="100%"/>
        </mx:HBox>
    </fx:Component>
</mx:headerRenderer>

ただし、何らかの理由で、ここのテキストは折り返される代わりに切り捨てられます(レンダラーの外部で機能します)。

また、AdvancedDataGridHeaderRendererのサブクラスを作成し、createChildrenをオーバーライドしてアイコンを追加してみました。

override protected function createChildren():void
{
    var icon:Image = new Image();
    icon.source = <image_url>;
    icon.width = 16;
    icon.height = 16;
    addChild(icon);

    super.createChildren();
}

しかし、その後、アイコンとテキストが重ね合わされます。

私はこれについての考えがありません。他に誰か?

4

2 に答える 2

2

あなたのheaderRendererheight="100%"から属性を削除したとき、それは私のために働きました。mx:Text

更新AdvancedDataGridコンポーネントを手動で拡大した場合にのみ、このように機能します。無条件に動作させる方法を検討します。

テキストコンポーネントの高さが100%に設定されている場合、親HBoxの高さに制限されていました。したがって、単語が折り返され、次の行に移動されたとき、Textコンポーネントの高さが単語を表示できないため、単語は表示されませんでした。

この制約を削除すると、テキストコンポーネントの高さは、headerRendererの場合と同様に、その内容に基づいて動的に決定されます。minHeightまた、テキストに追加して、ロード時に表示されるようにします。

コードは次のとおりです(サイズ変更中に表示されていたため、スクロールバーも削除しました)。

<mx:headerRenderer>
    <fx:Component>
        <mx:HBox width="100%"
                 height="100%"
                 verticalAlign="middle"
                 horizontalScrollPolicy="off"
                 verticalScrollPolicy="off">
            <mx:Image source="<image_url>"
                      width="10%"
                      height="100%"/>
            <mx:Text text="{data.headerText}"
                     width="90%"
                     minHeight="20"/>
        </mx:HBox>
    </fx:Component>
</mx:headerRenderer>
于 2012-08-28T11:42:38.407 に答える
0

動的に作成された列を使用してこれを行う方法に興味がある場合は、レンダラー用のHunternifのコードと、列作成に関するいくつかの追加コードの組み合わせが役に立ちました。

AdvancedDataGridに再レンダリングが必要であることを通知するには、列の幅を固定し、無効にする必要があります。

var cols:Array = [];

for each (...) {
    var column:AdvancedDataGridColumn = new AdvancedDataGridColumn();
    ...

    // Fix the width of created columns
    column.width = 150;

    cols.push(column);
}

grid.columns = cols;

// Invalidate columns so that sizes are recalculated
grid.mx_internal::columnsInvalid = true;

// Take changes into account
grid.validateNow();
于 2012-08-29T08:14:52.797 に答える