0

目标:我想将皮肤传递给列表的 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。

4

1 回答 1

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使用一些按钮皮肤来做到这一点。有效。

于 2011-05-04T19:37:28.390 回答