我正在创建一个组件,并希望像许多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" />
当我编译编译器抱怨时:无法从文本'red'解析uint类型的值。但是,如果我使用普通标签,我可以做
<mx:Label text="foobar" color="red">
没有任何问题,颜色属性仍然是类型uint。
我的问题是如何公开公共财产以便我可以控制组件文本的颜色?为什么我可以使用字符串“red”作为mx控件的uint字段,但在自定义组件中似乎无法做同样的事情,我是否需要做一些特别的事情?
感谢。
答案 0 :(得分:8)
颜色不是属性,它是一种风格。你需要定义这样的风格:
[Style(name="labelColor", type="uint", format="Color" )]
(如果您直接在MXML中定义它,请将其括在标记中)。然后,您需要添加一些ActionScript来处理此样式并将其应用于您需要的任何控件,请参阅http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html以获取更多信息。
答案 1 :(得分: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;
}