Преобразование строки в uint в actionscript / Flex
-
02-07-2019 - |
Вопрос
Я создаю компонент и хочу предоставить свойство color, как это делают многие элементы управления 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 из текста 'red'.Однако, если я использую простой ярлык, я могу сделать
<mx:Label text="foobar" color="red">
без каких-либо проблем, и свойство color по-прежнему имеет тип uint.
Мой вопрос в том, как я могу предоставить общедоступное свойство, чтобы я мог управлять цветом текста моих компонентов?Почему я могу использовать строку "red" в качестве поля uint для элементов управления mx, но, похоже, не могу сделать то же самое в пользовательском компоненте, нужно ли мне делать что-то особенное?
Спасибо.
Решение
Цвет - это не свойство, это стиль.Вам нужно определить стиль следующим образом:
[Style(name="labelColor", type="uint", format="Color" )]
(заключите его в тег, если вы определяете его непосредственно в MXML).Затем вам нужно добавить какой-нибудь ActionScript для обработки этого стиля и применить его к любому элементу управления, который вам нужен, пожалуйста, обратитесь к http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html для получения дополнительной информации.
Другие советы
Вот вам 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;
}