Conversion de chaîne en uint dans actionscript / Flex
-
02-07-2019 - |
Question
Je crée un composant et souhaite exposer une propriété de couleur comme le font de nombreux contrôles flex, disons que j'ai un composant simple comme celui-ci, appelons-le foo_label:
<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, comme suit:
<foo:foo_label color="red" />
Lorsque je compile le compilateur se plaint: impossible d'analyser la valeur de type uint à partir du texte "rouge". Cependant, si j’utilise une étiquette simple, je peux le faire
<mx:Label text="foobar" color="red">
sans aucun problème, et la propriété color est toujours de type uint.
Ma question est la suivante: comment puis-je exposer une propriété publique afin de pouvoir contrôler la couleur du texte de mes composants? Pourquoi puis-je utiliser la chaîne "rouge"? en tant que champ uint pour les contrôles mx mais ne semble pas pouvoir faire la même chose dans un composant personnalisé, dois-je faire quelque chose de spécial?
Merci.
La solution
La couleur n'est pas une propriété, c'est un style. Vous devez définir le style comme suit:
[Style(name="labelColor", type="uint", format="Color" )]
(mettez-le dans la balise si vous le définissez directement dans MXML). Vous devez ensuite ajouter du code ActionScript pour gérer ce style et l'appliquer à tout contrôle souhaité. Veuillez vous reporter à http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html pour plus d'informations.
Autres conseils
Vous êtes ici deux de mes fonctions utils:
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;
}