Button皮肤定制问题(如何用hostComponent进行交互)
我的意图:
动态替换Button的背景图片
问题描述(下面是ButtonSkin.mxml,其中对分析此问题不重要的部分都已略去,红字部分是重点):
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
minWidth="21" minHeight="21"
alpha.disabled="0.5">
<fx:Metadata>
<![CDATA[
/**
* @copy spark.skins.spark.ApplicationSkin#hostComponent
*/
[HostComponent("spark.components.Button")]
]]>
。。。
<s:Rect left="0" top="0" right="0" bottom="0" >
<s:fill>
<s:BitmapFill source="@Embed({hostComponent.content})"/> //红字处本意是想动态加入图片的,可hostComponent总为null
</s:fill>
</s:Rect>
。。。
</s:SparkSkin>
我是这么用此皮肤的:
updateBtn.content = "assets/小图标/mechanic.png";
updateBtn.setStyle("skinClass", UpdateButtonSkin);
按上面这样写图片始终显示不出来,但把mxml文件中的hostComponent.content替换成"assets/小图标/mechanic.png"就能正常显示出图片,不知是不是我写错了,该如何修改,谢谢!
[解决办法]
主程序:
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
//imgbg 这个是自定义的, 主要就是通过 setStyle 和 getStyle 来控制 skinClass 的参数.
btn.setStyle("imgbg","2_uuussseeennn.jpg")
}
]]>
</fx:Script>
<s:Button id="btn" label="click" skinClass="XX" />
----------------------
XX skinClass 里关于图片的代码:
<s:Image source="{getStyle('imgbg')}" />
-----------------------