質問

コンポーネントを作成していて、多くのフレックス コントロールと同じようにカラー プロパティを公開したいと考えています。たとえば、次のような単純なコンポーネントがあるとしましょう。それを 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">

問題なく、color プロパティは uint 型のままです。

私の質問は、コンポーネントのテキストの色を制御できるようにパブリック プロパティを公開するにはどうすればよいですか?mx コントロールの uint フィールドとして文字列「red」を使用できるのに、カスタム コンポーネントでは同じことができないのはなぜですか。何か特別なことをする必要があるのでしょうか?

ありがとう。

役に立ちましたか?

解決

色は特性ではなく、スタイルです。次のようにスタイルを定義する必要があります。

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

(MXML で直接定義する場合はタグで囲みます)。次に、このスタイルを処理し、必要なコントロールに適用するための ActionScript を追加する必要があります。を参照してください。 http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_1.html 詳細については。

他のヒント

ここに私の 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;  
    }     
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top