1

リピーターを使用している mxml パネルがあります。パネルは水平方向にサイズ変更できます。繰り返しコンポーネントをパネルと一緒にサイズ変更したいと思います。物事がどのように見えるかの簡単な例を次に示します。

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
    <!-- scripts and some controls -->
    <mx:VBox width="100%">
        <core:Repeater width="100%" dataProvider="model">
            <ns1:MyItemRenderer width="100%" />
        </core:Repeater>
    </mx:VBox>
</mx:TitleWindow>

コンポーネントのサイズを変更しても、繰り返される項目の幅は変わりません。

モデルに項目を追加および削除するボタンとイベント ハンドラーもあります。これが完了すると、リピーターが更新されて正しい数のアイテムが表示され、すべてのアイテムのサイズが正しく変更されます。

ルート パネルのサイズが変更されたときに、項目のサイズを変更できませんでした。リピーターの周りの VBOx がサイズ変更イベントを取得していることがわかります。ただし、繰り返されるアイテムはイベントを取得していません。VBox に接続したサイズ変更ハンドラーから手動で繰り返しアイテムにサイズ変更イベントをディスパッチしようとしましたが、それは役に立ちませんでした。

また、dataProvider である ArrayCollection にダミー項目を追加および削除しようとしました (上記のように正しいサイズ変更をトリガーするため)。全て。

リピーターのアイテムを囲んでいるコンテナーでサイズ変更する方法はありますか?

私が使用している ItemRenderer は、mx:List で使用すると正しくサイズ変更されます。これは、List コンテナによって設定された data プロパティと getRepeaterItem() の両方を Repeater で使用する場合に機能するように構築されています。この特定のケースでは、この特定のケースではうまくいかない rowCount、height、および maxHeight プロパティを介してその高さを制御する方法に関して、List をコンテナーとして使用することはできません (私はあなたを惜しまない詳細)。

4

2 に答える 2

0

titleWindow の updateDisplayList をオーバーライドし、高さまたは幅が変更されたときに、リピーター内で作成されたすべてのアイテムの displayList を無効にします。

とはいえ、リピーターを使用することは、内部のすべてのコンポーネントがレンダリングされるため、一般的に悪い習慣と見なされます。レンダラーの再利用を利用するリスト ベースのクラスは、はるかにパフォーマンスが高いと見なされます。

あなたのコード セグメントに基づいて、あなたのコードがリピーターなしで再加工できるかどうかはわかりません。

于 2010-06-03T19:26:25.830 に答える
0

記録のために、次の「解決策」を見つけました。

リピーターを囲むボックスで maxHeight 属性を使用し、それを他のコンポーネントから正しい値を導出する式にバインドします...囲んでいるパネルからはみ出させたくありませんが、今のところはこれで十分です。

本質的に:

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" ...>
    <!-- scripts and some controls -->
    <mx:VBox id="outerBox" height="100%">
        <mx:VBox id="innerBox" width="100%"
                 maxHeight="{outerBox.height - innerBox.y - 40}"> 
                 <!-- reserve 40 px for the button -->
            <core:Repeater width="100%" dataProvider="model">
                <ns1:MyItemRenderer width="100%" />
            </core:Repeater>
        </mx:VBox>
        <mx:Button label="Stay Visible"/>
    </mx:VBox>
</mx:TitleWindow>
于 2010-06-09T11:37:48.157 に答える