繁体   English   中英

Flex 4:将 ArrayCollection 皮肤作为数据提供者提供给列表的 ItemRenderer

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM