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事件对应的几个样式呢?