3

我正在创建一个组件并希望像许多 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”作为 mx 控件的 uint 字段,但在自定义组件中似乎不能这样做,我需要做一些特别的事情吗?

谢谢。

4

2 回答 2

8

颜色不是一种属性,它是一种风格。您需要像这样定义样式:

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

(如果直接在 MXML 中定义,请将其括在标记中)。然后您需要添加一些 ActionScript 来处理此样式并将其应用于您需要的任何控件,请参阅http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html了解更多信息信息。

于 2008-09-25T08:13:52.573 回答
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;  
    }     
于 2011-10-03T05:17:57.217 回答