2012-02-10 5 views
0

?問題はかなり簡単ですが、ImageButtonを作成するためにButtonを拡張し、ImageButtonSkinを作成するためにButtonSkinを拡張しました。しかし、ときに私はこのようhostComponentを定義します。ButttonSkinBase内ButtonBase:親スキンのhostComponentをオーバーライドするFlexモバイルスキン?

public var hostComponent:ImageButton 

私はhostComponentとの競合が発生するエラーが発生します。

どのようにして肌を拡張し、そのための新しいhostComponentを提供していますか?

+0

私はあなたができるとは思いません。さらに、ImageButtonを作成する理由は何ですか?スパークボタンにはイメージを与えるアイコンスタイルがあります。 – RIAstar

+0

うわー、いいですね。したがって、スキンを拡張することはできますが、親スキンで指定されたコンポーネントに対してのみスキンを使用できます。 ImageButtonは、アイコンだけでなく、アイコン全体に画像の背景を持たせたいからです。 ITは通常、テキストなしでさえあります。 – Ska

+0

ああ、その場合は、プロパティの代わりにカスタムボタンのスタイルにします。こうすることで、 'getStyle()'メソッドを使ってスキンでアクセスすることができ、 'hostComponent'をオーバーライドする必要はありません。 – RIAstar

答えて

2

どのようにして肌を拡張し、そのための新しいhostComponentを提供していますか?あなたがしなければならないのはなぜ

? hostComponentはImageButtonが拡張するものであるButtonBaseです。なぜあなたはhostComponentの型を変更する必要がありますか?あなたがのImageButtonとしてhostComponentにアクセスする必要がある場合、あなたはそれをキャストすることができます

var myImageButton : ImageButton = hostComponent as ImageButton; 

をこの質問へのコメントの中で、あなたは言った:

だから、あなたは肌を拡張し、しかし、あなたすることができます は、親のスキンが指定するコンポーネントに使用することができます。まったく真実ではありません

。 hostComponentにButtonBaseの型がありますが、ButtonSkinを拡張しようとしています。あなたのステートメントでは、ButtonButtonコンポーネントでのみButtonコンポーネントを使用することはできません。それは本当ではありません。

私はまた、メタデータに関する@ RIAstarさんのコメントに1点の明確化を追加します。メタデータは、コンパイラによるコードヒントおよびMXMLパラメータのチェックにのみ使用されます。あなたは簡単にそれらのいずれかのスタイルを作成することができます。

myHostComponent.setStyle('myImageColor',0x000000); 

そして、あなたは、このような皮膚でそれを使用することができます:あなただけのsetStyleメソッドを使用して値を設定する必要があります

this.getStyle('myImageColor'); 

私は思う - しかし、確認していない - あなたをたとえメタデータが宣言されていなくてもCSSを使ってスタイルを設定することができます。 Spark Component lifeCycleを使用すると、コンポーネントがスタイルを初期化する前にスタイルを設定することは完全に可能なはずです。

+1

ああ、問題は私がhostComponentに早くアクセスしていたことです。私はgetBorderClassForCurrentState()でそれを行う必要があります。スタイルに関しては、私がとにかくボタンをサブクラス化する必要があるので、スタイルよりもプロパティを行う方が意味があると思います。私にはわかりません。 – Ska

関連する問題