Pregunta

Estoy creando un componente y quiero exponer una propiedad de color como lo hacen muchos controles flexibles, digamos que tengo un componente simple como este, llamémoslo foo_label:


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

y luego agregue el componente en otro archivo mxml, algo parecido a:


<foo:foo_label color="red" />

Cuando compilo el compilador se queja: no se puede analizar el valor de tipo uint del texto 'rojo'. Sin embargo, si uso una etiqueta simple, puedo hacer

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

sin ningún problema, y ??la propiedad de color sigue siendo de tipo uint.

Mi pregunta es ¿cómo puedo exponer una propiedad pública para poder controlar el color del texto de mis componentes? ¿Por qué puedo usar la cadena " rojo " como un campo uint para los controles mx pero parece que no puede hacer lo mismo en un componente personalizado, ¿necesito hacer algo especial?

Gracias.

¿Fue útil?

Solución

El color no es una propiedad, es un estilo. Debe definir el estilo de esta manera:

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

(enciérrelo en la etiqueta si lo define directamente en MXML). Luego debe agregar ActionScript para manejar este estilo y aplicarlo a cualquier control que necesite, consulte http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html para obtener más información.

Otros consejos

Aquí tienes 2 de mis funciones de utilidades:

    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;  
    }     
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top