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.

Était-ce utile?

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;  
    }     
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top