2011-03-04 97 views

回答

3

你可以擴展AdvancedDataGrid如下面的例子:

import flash.display.GradientType; 
import flash.display.Graphics; 
import flash.display.Sprite; 
import flash.geom.Matrix; 
import mx.controls.AdvancedDataGrid; 
import mx.controls.listClasses.IListItemRenderer; 
import mx.core.mx_internal; 

use namespace mx_internal; 
public class CustomAdvancedDataGrid extends AdvancedDataGrid 
{ 
    public var secondaryColor : uint = 0xFFFFFF; 

    protected override function drawSelectionIndicator(
     indicator:Sprite, x:Number, y:Number, 
     width:Number, height:Number, color:uint, 
     itemRenderer:IListItemRenderer) : void 
    { 
     if (isRowSelectionMode()) 
      width = unscaledWidth - viewMetrics.left - viewMetrics.right; 

     var mat : Matrix = new Matrix(); 
     mat.createGradientBox(width,height,-90*Math.PI/180); 

     var g:Graphics = Sprite(indicator).graphics; 
     g.clear(); 
     g.beginGradientFill(GradientType.LINEAR, [color, secondaryColor], [1, 1], [0, 255], mat); 
     g.drawRect(0, 0, width, height); 
     g.endFill(); 

     indicator.x = x; 
     indicator.y = y; 
    } 
} 

其他功能,你可以考慮重寫爲:drawHighlightIndicator和drawCaretIndicator(其具有相同的結構)。至於secondaryColor,您可以將其保留爲硬編碼,或爲其定義樣式。

+0

哇 - 它的工作 - 非常感謝! 我可以招待你一杯咖啡嗎? )) – Vladimir 2011-03-06 07:09:11

+0

很高興聽到這一點。你能投票並接受答案嗎? :) – 2011-03-06 10:42:55