Apache flex 使用itemRenderer更改列表的contentBackgroundColor
嘿,这里-我正试图根据在数据提供程序中找到的内容更改列表组件的contentBackgroundColor。例如:Apache flex 使用itemRenderer更改列表的contentBackgroundColor,apache-flex,list,flex4,flash-builder,itemrenderer,Apache Flex,List,Flex4,Flash Builder,Itemrenderer,嘿,这里-我正试图根据在数据提供程序中找到的内容更改列表组件的contentBackgroundColor。例如: <s:ItemRenderer name="ir" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" autoDrawBackgroun
<s:ItemRenderer name="ir"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
autoDrawBackground="true"
contentBackgroundColor="{(data.location == 'home')?0x000000:0x666666}">
不幸的是,这似乎被忽略了,因为列表只显示默认的白色背景。有人能提出解决方案吗?我会覆盖set data setter方法并在那里设置样式,因为您可以保证捕获对数据的每次更改:
override public function set data(value:Object):void {
super.data = value;
this.setStyle("contentBackgroundColor", value.location == "home" ? 0x000000 : 0x666666);
}
ItemRenderer从不尊重contentBackgroundColor的组扩展而来,而是将其作为继承样式传递给其元素 所以contentBackgroundColor确实可以工作,但并不像您期望的那样,如果您将一个确实尊重contentBackgroundColor的组件放入渲染器,那么它将获得该颜色,例如:
<s:List>
<s:dataProvider>
<s:ArrayList>
<fx:String>0</fx:String>
</s:ArrayList>
</s:dataProvider>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer contentBackgroundColor="red">
<s:VGroup paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
<s:Label text="ItemRenderer {data}" />
<s:ComboBox />
</s:VGroup>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
<s:List>
<s:dataProvider>
<s:ArrayList>
<fx:String>0</fx:String>
<fx:String>1</fx:String>
</s:ArrayList>
</s:dataProvider>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<fx:Script>
<![CDATA[
override public function set data(value:Object):void {
super.data = value;
if (data == null)
return;
if (data == 1){
c.color = 0xEEEEEE;
} else {
c.color = 0x666666;
}
}
]]>
</fx:Script>
<s:Rect width="100%" height="100%">
<s:fill>
<s:SolidColor id="c" />
</s:fill>
</s:Rect>
<s:Label text="ItemRenderer {data}" />
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
0
正如前面指出的,您最好覆盖数据设置器并从中更改背景矩形的颜色,例如:
<s:List>
<s:dataProvider>
<s:ArrayList>
<fx:String>0</fx:String>
</s:ArrayList>
</s:dataProvider>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer contentBackgroundColor="red">
<s:VGroup paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
<s:Label text="ItemRenderer {data}" />
<s:ComboBox />
</s:VGroup>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
<s:List>
<s:dataProvider>
<s:ArrayList>
<fx:String>0</fx:String>
<fx:String>1</fx:String>
</s:ArrayList>
</s:dataProvider>
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<fx:Script>
<![CDATA[
override public function set data(value:Object):void {
super.data = value;
if (data == null)
return;
if (data == 1){
c.color = 0xEEEEEE;
} else {
c.color = 0x666666;
}
}
]]>
</fx:Script>
<s:Rect width="100%" height="100%">
<s:fill>
<s:SolidColor id="c" />
</s:fill>
</s:Rect>
<s:Label text="ItemRenderer {data}" />
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
0
1.
呼叫正常,但仍被忽略。如果我在itemrenderer集合数据方法中跟踪(value.location),它跟踪的次数会比我在xml中有location元素的次数多。实际上是+1的两倍。非常奇怪的行为…嗯,如果将AutoDruckGround设置为false会发生什么?另外,另一种方法是将其设置为false,并在项目渲染器的背景中添加一个Rect,然后根据需要设置填充颜色。如果AutoDruckGround=false,则背景保持白色,但项目高亮显示现在处于关闭状态。我将尝试Rect解决方案,在adobe帮助页面上也看到了这一点。添加不起作用。您需要为其提供维度。宽度/高度100%或左、右、上、下=0。如果itemRenderer是外部的,并且在一个水平布局中有多个标签,该怎么办。例如:
这很难解释。如果我将上面的代码应用于我的外部itemRenderer,它会在第一个标签开始之前渲染一个彩色框。如果If条件中的条件为true,则会将该彩色框渲染为特定颜色。然而,当我滚动我的列表时,它的行为很奇怪,并且以一种随机的方式呈现其他颜色的框。我希望这是有道理的。