[英]Flex 4: Skins ArrayCollection as dataprovider to an ItemRenderer of a List
目标:我想将皮肤传递给列表的 itemRenderer(这是一个按钮),并能够为该列表中的每个按钮设置皮肤。
这就是我所拥有的:
列表:
<s:List itemRenderer="renderers.ItemRenderer" dataProvider="{collectionWorkspace}" />
数组集合:
<s:ArrayCollection id="collectionWorkspace">
<comp:Layout1 />
<comp:Layout2 />
<comp:Layout3 />
<comp:Layout4 />
<comp:Layout5 />
</s:ArrayCollection>
布局是带有 HostComponent 按钮的皮肤类。
项目渲染器:
<?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。
您将skinClass
属性传递给皮肤 class 的实例,而不是实际的 class(按钮需要创建自己的皮肤类实例)。
如果可以的话,最好的办法是让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>
如果你不能这样做,你应该能够拉出实例的 class 并将其传递给skinClass
。
<s:Button skinClass="{Object(data).constructor}"/>
编辑:
默认情况下绑定不起作用,因为data
在使用 class 初始化之前以null
开始。 如果你给它null
,你会得到异常。 要修复它,您需要返回null
和值之间的默认值:
<s:Button skinClass="{data != null ? data as Class : spark.skins.spark.ButtonSkin}"/>
我尝试使用一些按钮皮肤对ArrayCollection
执行此操作。 有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.