2008-09-25 6 views
3

Je crée un composant et que vous souhaitez exposer une propriété de couleur que de nombreux contrôles flex font, permet de dire que je suis simple composant comme celui-ci, permet de l'appeler foo_label:Conversion chaîne à uint en actionscript/Flex

 

<mx:Canvas> 
    <mx:Script> 
     [Bindable] public var color:uint; 
    </mx:Script> 
    <mx:Label text="foobar" color="{color}" /> 
</mx:Canvas> 
 

puis ajoutez le composant dans un autre fichier MXML, quelque chose le long des lignes de:

 

<foo:foo_label color="red" /> 
 

Lorsque je compile le compilateur se plaint: ne peut pas analyser la valeur de type uint de texte « rouge ». Cependant, si j'utilise une étiquette simple, je peux faire

<mx:Label text="foobar" color="red">

sans aucun problème, et la propriété color est toujours de type uint.

Ma question est comment puis-je exposer une propriété publique afin que je puisse contrôler la couleur de mon texte de composants? Pourquoi est-ce que je peux employer la chaîne "rouge" comme champ d'uint pour les commandes de mx mais ne peux pas sembler faire la même chose dans un composant fait sur commande, dois-je faire quelque chose spécial?

Merci.

Répondre

8

La couleur n'est pas une propriété, c'est un style. Vous devez définir le style comme ceci:

[Style(name="labelColor", type="uint", format="Color")] 

(le placer dans le tag si vous le définissez directement en MXML). Vous devez ensuite ajouter du code ActionScript pour gérer ce style et l'appliquer au contrôle dont vous avez besoin. Pour plus d'informations, reportez-vous à http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html.

2

Vous êtes 2 de mes utils fonctions:

public static function convertUintToString(color:uint):String { 
      return color.toString(16); 
    } 

    public static function convertStringToUint(value:String, mask:String):uint { 
      var colorString:String = "0x" + value; 
      var colorUint:uint = mx.core.Singleton.getInstance("mx.styles::IStyleManager2").getColorName(colorString); 

      return colorUint; 
    }  
Questions connexes