Converter string para uint em actionscript / Flex
-
02-07-2019 - |
Pergunta
Estou criando um componente e deseja expor uma propriedade de cor como muitos controles Flex fazer, digamos que eu tenho componente simples como este, vamos chamá-lo foo_label:
<mx:Canvas>
<mx:Script>
[Bindable] public var color:uint;
</mx:Script>
<mx:Label text="foobar" color="{color}" />
</mx:Canvas>
e, em seguida, adicione o componente em outro arquivo mxml, algo ao longo das linhas de:
<foo:foo_label color="red" />
Quando eu compilar o compilador reclama: pode não o valor de análise do tipo uint a partir do texto 'vermelho'. No entanto, se eu usar uma etiqueta simples que posso fazer
<mx:Label text="foobar" color="red">
sem problemas, ea propriedade cor ainda é tipo uint.
A minha pergunta é como eu posso expor uma propriedade pública para que eu possa controlar a cor do meu texto componentes? Por que eu posso usar a string "vermelho" como um campo uint para os controles mx mas parece que não pode fazer o mesmo em um componente personalizado, eu preciso fazer alguma coisa especial?
Graças.
Solução
A cor não é uma propriedade, é um estilo. Você precisa definir o estilo parecido com isto:
[Style(name="labelColor", type="uint", format="Color" )]
(coloque-a tag se você defini-lo diretamente no MXML). Você precisa então adicionar um pouco de ActionScript para lidar com este estilo e aplicá-lo a qualquer controle que você precisa, consulte o http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html para obter mais informações.
Outras dicas
Aqui estão 2 das minhas funções 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;
}