2011-06-14 4 views
0

Je dois dessiner une superposition sur une cellule DataGrid. Je veux que la superposition soit placée au-dessus des données de cellules sous-jacentes et pour afficher un motif de hachurage, c'est-à-dire: des lignes horizontales et verticales, comme une mini-grille dans la cellule.Superposition de Flex 4 Datagrid

L'idée de la superposition est de montrer que lorsqu'aucune donnée n'a été reçue pendant un certain temps, les données sont devenues obsolètes ou périmées.

Je suis assez sûr que j'ai besoin de faire quelque chose dans le updateDisplayList() du moteur de rendu, mais je n'ai pas utilisé l'API de dessin, donc je ne suis pas sûr de savoir comment faire.

Toute aide serait grandement appréciée.

Merci Mark

Répondre

0

Donc je suppose que vous avez 2 états pour le ItemRenderer, on l'appelait "nouveau", un "ancien", non?

Une bonne nouvelle: vous n'avez pas besoin de surcharger la fonction updateDisplayList. Flex SDK 4+ fournit un utilitaire graphique nommé FXG. Vous pouvez visiter ce lien pour plus d'informations: http://help.adobe.com/en_US/flex/using/WS145DAB0B-A958-423f-8A01-12B679BA0CC7.html

Dans votre cas, vous pouvez faire quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" width="50" height="50" click="currentState = 'old'"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:states> 
     <s:State name="new" /> 
     <s:State name="old" /> 
    </s:states> 
    <s:BorderContainer width="50" height="50"> 
     <s:Label text="{data.toString()}" /> 
    </s:BorderContainer> 
    <s:Path data="M 0 10 L 50 10 M 0 20 L 50 20 M 0 30 L 50 30 M 0 40 L 50 40 M 10 0 L 10 50 M 20 0 L 20 50 M 30 0 L 30 50 M 40 0 L 40 50" 
      includeIn="old"> 
     <s:stroke> 
      <s:SolidColorStroke color="black" weight="1" /> 
     </s:stroke> 
    </s:Path> 
</s:ItemRenderer> 

Idée: Créer un chemin (dessiner votre grille) et le mettre à l'état « vieux » , chaque fois que l'élément passe à l'état "ancien", la grille apparaîtra.