2010-06-11 9 views
0

J'ai un contrôle d'arborescence avec un rendu d'élément personnalisé. Le rendu de l'élément a différents états qui doivent être définis pendant le déplacement d'un élément sur le rendu de l'élément. Je comprends à la lecture de cet article http://forums.adobe.com/message/2091088 que la «bonne manière» de faire ceci est de surcharger la méthode «getCurrentState» et d'ajouter du texte. Je fais ça.Comment puis-je forcer un itemrenderer arborescente à être redessiné lors d'une opération glisser-déposer?

Maintenant, dans mon contrôle d'arbre, je gère l'événement glisser sur et obtenir une référence à l'itemrenderer qui est en train d'être déplacé et j'ai mis la propriété booléenne 'dragOver' à true. Maintenant j'ai juste besoin de forcer mon itemRenderer à redessiner. Je ne peux pas comprendre cela. Une solution de contournement consiste simplement à définir l'état actuel de itemRenderer.

Ma question alors, comment puis-je forcer mon itemRenderer à actualiser? (Et je l'ai essayé d'appeler validateNow, invalideDisplayList/Propriétés/Taille, sans résultat)

<?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> 

... 

Répondre

0

Un arbre est un objet ListBase, alors essayez d'appeler treeObject.invalidateList().

Il peut y avoir un moyen plus efficace lié à itemRenderer seul, mais invalidateList() a résolu tous mes problèmes de rendu ListBase dans le passé.

+0

Non ... ne semble pas fonctionner. Mon intuition est que le glisser-déposer interfère (dragEnabled, dropEnabled, dragMoveEnabled tout vrai). Il y a un dropIndicator pour l'arbre ... mais j'ai besoin des renderers pour montrer leur état visuel. Je vais jeter un coup d'œil au jira d'Adobe et voir si je déterre quelque chose. – swidnikk