?问题非常简单,我将Button扩展为创建ImageButton,并扩展ButtonSkin以创建ImageButtonSkin。但是,当我像这样定义hostComponent时:
public var hostComponent:ImageButton
我得到一个错误,即与ButtatonSkinBase中的hostComponent:ButtonBase发生冲突。
如何扩展皮肤并为其提供新的hostComponent?
答案 0 :(得分:2)
如何扩展皮肤并为其提供新的hostComponent?
你为什么要这样做? hostComponent是一个ButtonBase,它是ImageButton扩展的东西。为什么需要更改hostComponent的类型?如果您需要将hostComponent作为ImageButton访问,那么您可以将其转换为:
var myImageButton : ImageButton = hostComponent as ImageButton;
在对这个问题的评论中,你说:
所以,你可以扩展皮肤,但你只能 将它用于父皮肤指定的组件,太棒了。
这根本不应该是真的。你自己说过你的hostComponent有一种ButtonBase,但是你正在扩展ButtonSkin。根据您的声明,您将无法在Button组件上使用ButtonSkin,仅在ButtonBase组件上使用ButtonSkin。事实并非如此。
我还要对@ RIAstar关于元数据的评论添加一个澄清。元数据仅用于编译器的代码提示和MXML参数检查。您可以轻松创建一种没有任何一种风格的风格。您只需使用setStyle方法设置值:
myHostComponent.setStyle('myImageColor',0x000000);
你可以在皮肤上使用它:
this.getStyle('myImageColor');
我认为 - 但我不确定 - 即使未声明元数据,您也可以通过CSS设置样式。使用Spark Component lifeCycle,应该可以在组件初始化其样式之前设置样式。