2011-05-04 17 views
0

目的:我想皮膚傳遞到的列表的的itemRenderer(它是一個按鈕),並能夠在該列表中對皮膚每個按鈕。的Flex 4:皮膚的ArrayCollection作爲數據提供器到的列表的ItemRenderer的

這是我有:

列表:

<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按鈕。

的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的不能被發現。

回答

2

你交給了skinClass財產皮膚類,而不是實際的類(該按鈕,需要創建自己的皮膚類的實例)的實例。

如果可以的話,做的最好的事情是使collectionWorkspace不實例類對象的數組。

<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這樣做。有效。

+0

編輯的按鈕的skinClass價值爲我工作好!感謝Brian。我希望別人也能在這方面找到價值。 – Yozef 2011-05-05 14:54:38