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