DataGridHeader是DataGrid里使用的header类,我们希望设置header的鼠标经过、点击等背景的样式,但是不要对列表样式产生影响。
可是当我看了DataGridHeader类里对鼠标经过改变样式的写法就发现情况悲催了。
先看下构造器:
/**
* Constructor.
*/
public function DataGridHeader()
{
super();
addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
用鼠标经过举例,mouseOverHandler方法:
protected function mouseOverHandler(event:MouseEvent):void
{
//省略.......
s = Sprite(getChildByName("sortArrowHitArea"));
if (visibleColumns[i].sortable)
{
var s:Sprite = Sprite(
selectionLayer.getChildByName("headerSelection"));
if (!s)
{
s = new FlexSprite();
s.name = "headerSelection";
s.mouseEnabled = false;
selectionLayer.addChild(s);
}
drawHeaderIndicator(s, r.x, 0, visibleColumns[i].width, cachedHeaderHeight - 0.5, getStyle("rollOverColor"), r);
}
//省略.......
}
drawHeaderIndicator方法,protected的啊,我们不能重写
protected function drawHeaderIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
var g:Graphics = indicator.graphics;
g.clear();
g.beginFill(color);
g.drawRect(0, 0, width, height);
g.endFill();
indicator.x = x;
indicator.y = y;
}
发现使用了rollOverColor样式,这样式是在DataGrid中定义的。。。但是DataGridColumn也使用了这个样式啊,改了就会把header和column都改了。要怎么才能简单的实现分别定义header和column的mouse事件对应的几个样式呢?

