Преобразование строки в uint в ActionScript / Flex

Я создаю компонент и хочу предоставить свойство цвета, как это делают многие гибкие элементы управления, скажем, у меня есть простой компонент, подобный этому, позвольте называть его foo_label:


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

а затем добавьте компонент в другой файл mxml, примерно так:


<foo:foo_label color="red" />

Когда я компилирую, компилятор жалуется: не могу разобрать значение типа uint из текста «красный». Однако, если я использую простой ярлык, я могу сделать

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

без каких-либо проблем, а свойство цвета по-прежнему имеет тип uint.

Мой вопрос в том, как я могу предоставить общедоступное свойство, чтобы я мог контролировать цвет текста моих компонентов? Почему я могу использовать строку «red» в качестве поля uint для элементов управления mx, но не могу делать то же самое в пользовательском компоненте, нужно ли мне делать что-то особенное?

Спасибо.


person mmattax    schedule 25.09.2008    source источник


Ответы (2)


Цвет - это не свойство, это стиль. Вам нужно определить стиль следующим образом:

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

(заключите его в тег, если вы определяете его непосредственно в MXML). Затем вам нужно добавить код ActionScript для обработки этого стиля и применить его к любому элементу управления, который вам нужен, см. http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html для получения дополнительной информации.

person Borek Bernard    schedule 25.09.2008

Вот вам две из моих функций утилиты:

    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;  
    }     
person theaibo    schedule 03.10.2011