Try boxa.setStyle("styleName", super.data.style)
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of
Benjamin
Sent: Wednesday, November 05, 2008 7:16 AM
To: [email protected]
Subject: [flexcomponents] Change item renderer style name in Tilelist
Hello,
I am new to Flex. I am facing one problem which is driving me crazy. It would
be very helpful if any one of Flex experts out there help me.
I need to show a label with gradient background color as each item component in
TileList. Label does not support colored gradient background. So I am placing
the Label on top of a canvas and using below workaround style on canvas.
.grad1
{ borderStyle: applicationControlBar;
fillAlphas: 1.0, 1.0;
highlightAlphas: 0, 0;
fillColors: #C6292C, #700C06;
}
Using the following code, I am able to acheive this.
<mx:TileList width="100%" height="100%" dataProvider="{ listData.item }"
x="0" y="0" horizontalScrollPolicy="off" itemRenderer="TileItemRenderer">
<mx:itemRenderer>
<mx:Component>
<mx:VBox paddingTop="4" paddingRight="4" paddingBottom="2" paddingLeft="4">
<mx:Canvas id="boxa" width="100%" height="100%" styleName="grad1"
horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Label text="{data.name }" />
</mx:Canvas>
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
<! ;/mx:TileList>
Now I want change the gradient color based on the data text displayed in Label
TileList data
<mx:XMLList id="listData">
<items>
<item>
<name>XXXXX</name>
<style>grad1</style>
</item>
<item>
<name>YYYYY</name>
<style>grad3</style>
</item>
<item>
<name>ZZZZ</name>
<style>grad2</style>
</item>
</items>
</mx:XMLL! ist>
I added some inline styles for different colors
<mx:Style>
.grad1, .grad2,.grad3, .grad4
{ borderStyle: applicationControlBar;
fillAlphas: 1.0, 1.0;
highlightAlphas: 0, 0;
}
.grad1
{
fillColors: #C6292C, #700C06;
}
.grad2
{
fillColors: #F7A71A, #E36E11;
}
.grad3
{
fillColors: #ECC917, #BB8E00;
}
.grad4
{
fillColors: #2F72CB, #15396F;
}
</mx:Style>
I changed the itemrenderer as below
<mx:itemRenderer>
<mx:Component>
<mx:VBox paddingTop="4" paddingRight="4" paddingBottom="2" paddingLeft="4">
<mx:Canvas id="boxa" width="100%" height="100%" styleName="grad1"
horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Script>
<![CDATA[
override protected function commitProperties():void
{
super.commitProperties();
boxa.styleName = super.data.style;
}
]]>
</mx:Script>
<mx:Label text="{data.name }" />
</mx:Canvas>
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
But this gives me an error on the line
boxa.styleName = super.data.style;
TypeError: Error #1006: value is not a function.
at
mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initThemeColor()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:7845]
at mx.core::UIComponent/set
styleName()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:4546]
at
RiskEnginePrototype_inlineComponent1/commitProperties()[C:\projects\RiskEnginePrototype\themesamples\brownie\src\RiskEnginePrototype.mxml:325]
at
mx.core::UIComponent/validateProperties()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5749]
at
mx.managers::LayoutManager/validateClient()[E:\dev\3.1.0\frameworks\projects\fra!
mework\src\mx\managers\LayoutManager.as:794]
at
mx.controls.listClasses::TileBase/http://www.adobe.com/2006/flex/mx/internal::setupRendererFromData()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:1998]
at
mx.controls.listClasses::TileBase/measureHeightOfItems()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:2024]
at
mx.controls.listClasses::TileBase/commitProperties()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\controls\listClasses\TileBase.as:2329]
at
mx.core::UIComponent/validateProperties()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:5749]
at mx.managers::LayoutManager!
/validateProperties()[E:\dev\3.1.0\frameworks\proj
ects\framework\src\mx\managers\LayoutManager.as:522]
at
mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:642]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at
mx.core::UIComponent/callLaterDispatcher2()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8565]
at
mx.core::UIComponent/callLaterDispatcher()[E:\dev\3.1.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8508]
is there any other easier way to acheive this?
Thanks in advance!!
Ben