Преобразование строки в uint в ActionScript / Flex - PullRequest
3 голосов
/ 25 сентября 2008

Я создаю компонент и хочу предоставить свойство цвета, как это делают многие гибкие элементы управления. Допустим, у меня есть такой простой компонент, давайте назовем его 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 из текста 'red'. Однако, если я использую простой ярлык, я могу сделать

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

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

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

Спасибо.

Ответы [ 2 ]

8 голосов
/ 25 сентября 2008

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

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

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

2 голосов
/ 03 октября 2011

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

    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;  
    }     
...