2008-09-25 55 views
3

我創建一個組成部分,要公開顏色屬性許多柔性的控制做的,可以說我有一個這樣簡單的組件,讓我們把它叫做foo_label:轉換字符串中動作爲uint/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。

我的問題是如何公開屬性,以便我可以控制我的組件文本的顏色?爲什麼我可以使用字符串「red」作爲mx控件的uint字段,但似乎無法在自定義組件中做同樣的事情,我是否需要做一些特殊的事情?

謝謝。

回答

8

顏色不是屬性,它是一種風格。您需要像這樣定義樣式:

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

(如果直接在MXML中定義它,請將其包含在標記中)。然後,您需要添加一些ActionScript來處理這種風格,並將其應用於您需要的任何控件,請參閱http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html以獲取更多信息。

2

在這裏,你是我的utils的功能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; 
    }