0

カスタムアイテムレンダラーを備えたツリーコントロールがあります。アイテムレンダラーにはさまざまな状態があり、アイテムがアイテムレンダラー上にドラッグされているときに設定する必要があります。この投稿http://forums.adobe.com/message/2091088を読んだことで、これを行うための「正しい方法」は、「getCurrentState」メソッドをオーバーライドしてテキストを追加することであることがわかりました。私がする。

ツリーコントロールで、ドラッグオーバーイベントを処理し、ドラッグオーバーされているitemrendererへの参照を取得し、ブール値の「dragOver」プロパティをtrueに設定します。ここで、itemRendererを強制的に再描画する必要があります。私はそれを理解することはできません。回避策は、itemRendererのcurrentStateを設定することです。

それでは、私の質問ですが、どうすればitemRendererを強制的に更新できますか?(そして、validateNow、invalideDisplayList / Properties / Sizeを呼び出してみましたが、役に立ちませんでした)

<?xml version="1.0" encoding="utf-8"?>
<s:MXTreeItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[           
            import mx.events.DragEvent;
            import mx.events.FlexEvent;

            import spark.layouts.supportClasses.DropLocation;

            public var dragOver:Boolean = false;

            override protected function getCurrentRendererState():String
            {

                var skinState:String = super.getCurrentRendererState();

                if( dragOver )
                    skinState += "AndDragOver";

                trace('getCurrentRendererState', skinState);
                return skinState;
            }

        ]]>
    </fx:Script>

    <s:states>
        <s:State name="normal" />            
        <s:State name="hovered" />
        <s:State name="selected" />
        <s:State name="normalAndDragOver" stateGroups="dragOverGroup" />            
        <s:State name="hoveredAndDragOver" stateGroups="dragOverGroup" />
        <s:State name="selectedAndDragOver" stateGroups="dragOverGroup" />
    </s:states>

...
4

1 に答える 1

0

ツリーはListBaseオブジェクトなので、treeObject.invalidateList()を呼び出してみてください。

itemRendererだけに関連するより効率的な方法があるかもしれませんが、invalidateList()は、過去のすべてのListBaseレンダリングの問題を解決しました。

于 2010-06-12T06:18:04.653 に答える