目标:我想将Skins传递给List的itemRenderer(这是一个Button),并且能够为该List中的每个按钮设置外观。
这就是我所拥有的:
列表:
<s:List itemRenderer="renderers.ItemRenderer" dataProvider="{collectionWorkspace}" />
的ArrayCollection:
<s:ArrayCollection id="collectionWorkspace">
<comp:Layout1 />
<comp:Layout2 />
<comp:Layout3 />
<comp:Layout4 />
<comp:Layout5 />
</s:ArrayCollection>
布局是带有HostComponent Button的外观类。
的ItemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:s="library://ns.adobe.com/flex/spark">
<s:states>
<s:State name="normal" />
</s:states>
<s:Button skinClass="{data}"/>
</s:ItemRenderer>
我收到错误(已修复澄清): 错误:应用程序外观....无法找到Button1。
答案 0 :(得分:2)
您正在将skinClass
属性传递给外观类的实例,而不是实际的类(按钮需要创建自己的外观类实例)。
如果可以,最好的办法是让collectionWorkspace
成为Class对象的数组,而不是实例。
<s:ArrayCollection id="collectionWorkspace">
<fx:Class>yourPkg.Layout1</fx:Class>
<fx:Class>yourPkg.Layout2</fx:Class>
<fx:Class>yourPkg.Layout3</fx:Class>
<fx:Class>yourPkg.Layout4</fx:Class>
<fx:Class>yourPkg.Layout5</fx:Class>
</s:ArrayCollection>
如果你不能这样做,你应该能够拉出实例的类并将其传递给skinClass
。
<s:Button skinClass="{Object(data).constructor}"/>
修改强>
默认情况下,绑定不起作用,因为data
在使用类初始化之前以null
开始。如果你给它null
,你将获得例外。要解决此问题,您需要返回null
和值之间的默认值:
<s:Button skinClass="{data != null ? data as Class : spark.skins.spark.ButtonSkin}"/>
我尝试使用一些按钮外观使用ArrayCollection
执行此操作。它奏效了。