2008-09-25 4 views
3

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

 

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

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

Спасибо.

ответ

8

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

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

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

2

Здесь вы 2 моих 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; 
    }