此page描述了如何为DataGrid的标头重写drawHighlightIndicator/drawSelectionIndicators方法,但AdvancedDataGrid在mx_internal中没有“headerClass”。它有一个headerRenderer。如何删除AdvancedDataGrid上的高亮/选区
如何在Flex 3中的AdvancedDataGrid上移除那些爆炸的高光?
此page描述了如何为DataGrid的标头重写drawHighlightIndicator/drawSelectionIndicators方法,但AdvancedDataGrid在mx_internal中没有“headerClass”。它有一个headerRenderer。如何删除AdvancedDataGrid上的高亮/选区
如何在Flex 3中的AdvancedDataGrid上移除那些爆炸的高光?
图形调用平局是在AdvancedDataGridBaseEx.as从线5468-5471:
var g:Graphics = s.graphics;
g.clear();
g.beginFill(getStyle("rollOverColor")); //all I really wanted was to decrease the alpha here :(
g.drawRect(0, 0, w, h - 0.5);
g.endFill();
为了摆脱这个你可以在扩展AdvancedDataGrid的类做到这一点:
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import mx.controls.AdvancedDataGrid;
public class AdvancedDataGridMinusHighlights extends AdvancedDataGrid
{
public function AdvancedDataGridMinusHighlights()
{
super();
}
override protected function mouseOverHandler(event:MouseEvent):void
{
super.mouseOverHandler(event);
var s:Sprite = Sprite(
selectionLayer.getChildByName("headerSelection"));
if(s) s.graphics.clear();
}
override protected function mouseDownHandler(event:MouseEvent):void
{
super.mouseDownHandler(event);
var s:Sprite = Sprite(
selectionLayer.getChildByName("headerSelection"));
if(s) s.graphics.clear();
}
}
}
虽然这是一个非常不雅的解决方案,因为它所做的只是清楚已经绘制的内容。由于AdvancedDataGridBaseEx中的鼠标处理程序中存在太多其他垃圾,因此您将无法轻松定制页眉的外观。
稍微更优雅的解决方案是将AdvancedDataGridBaseEx的完整源代码拷贝到mx.controls包中(我相信你们中的许多人都知道并且同样意识到了后果)。
很抱歉发布了一个不同的答案,但我没有足够的'点'来直接评论这个。今天我遇到了完全相同的问题,并发现这个帖子非常有帮助。
纠正我,如果我错了,但我觉得一个线是以防止AdvancedDataGrid从正确排序的数据(如果启用数据排序)的mouseDownHandler丢失:
override protected function mouseDownHandler(event:MouseEvent):void
{
super.mouseDownHandler(event);
var s:Sprite = Sprite(
selectionLayer.getChildByName("headerSelection"));
if(s) s.graphics.clear();
}
虽然它可能是有用的。