3

コンポーネントを作成していて、多くのフレックス コントロールと同じようにカラー プロパティを公開したいと考えています。このような単純なコンポーネントがあるとします。それを 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 フィールドとして使用できるのに、カスタム コンポーネントでは同じようにできないのはなぜですか? 何か特別なことをする必要がありますか?

ありがとう。

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

ここに私の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;  
    }     
于 2011-10-03T05:17:57.217 に答える