2011-06-01 41 views
1

有沒有辦法自定義項目渲染器的翻轉和選定顏色而不會丟失交替的背景顏色?Flex itemrenderer禁用翻轉但保持交替顏色

當我將autoDrawBackground標誌設置爲false時,翻轉效果停止,但由於某些原因,交替背景也未繪製。

我想創建一個渲染器,它在懸停狀態下繪製白色邊框,並選擇一個黃色邊框,而不是默認的翻轉顏色。 我還想保持我在列表中設置的交替背景顏色。

有什麼建議嗎?

+0

有一個屬性稱爲「useRollOver」。將其設置爲false並且不要使用autoDrawBackground = false,因爲這會導致問題。 – 2011-06-01 10:38:14

+0

useRollOver僅適用於MX組件。 autoDrawBackground只適用於List控件,不適用於DataGrid。 – Reado 2014-09-01 11:20:42

回答

2

您可以使用ItemRenderer類的「的ItemIndex」屬性繪製背景。例如:

override protected function updateDisplayList(unscaledWidth:Number, 
               unscaledHeight:Number):void 
{ 
    backgroundFill.color = itemIndex % 2 ? 0xff0000 : 0x00ff00; 
    super.updateDisplayList(unscaledWidth, unscaledHeight); 
} 

將紅色和綠色行之間交替爲背景圖形是這樣的:

<s:Rect id="background" left="0" right="0" top="0" bottom="0"> 
    <s:fill> 
     <s:SolidColor id="backgroundFill" /> 
    </s:fill> 
</s:Rect> 

使用這種技術,你可以明顯地做更復雜的事情太多,像梯度,阿爾法效果和等等。

+0

謝謝這就是我所缺少的。我將你的解決方案與getStyle(「alternatingItemColors」)結合使用,以獲取列表中的顏色,所以我不必將它們存儲在渲染器中 – 2011-06-01 10:35:58

1
<s:states> 
    <s:State name="normal" /> 
    <s:State name="hovered" /> 
    <s:State name="selected" /> 
</s:states> 

<s:BorderContainer backgroundColor.selected="0xA9C6EE" backgroundColor.normal="0xffffff" backgroundColor.hovered="0xCEDBEE" height="50" width="233">   

</s:BorderContainer> 

我認爲這就是你所需要的,如果我沒有誤解你的問題:)

+0

這就是我需要的。但問題是我必須將autoDrawBackground設置爲false,否則默認的翻轉效果也會觸發。當我將此標誌設置爲false時,我在列表中設置的交替着色器不再起作用。我使用RIAstar的答案使用getStyle(「alternatingItemColors」)來設置列表中的顏色數組 – 2011-06-01 10:34:46

+0

您可以根據需要設置樣式。例如''List.blueTheme {selectionColor:#7FACF6; }'[link] http://tourdeflex.adobe.com/flex4.0/CSSTypeClassSelector/sample.html你可以看到詳細的例子如何設置風格。 – ophi 2011-06-01 11:36:23