Apache flex 如何删除AdvancedDataGrid上的突出显示/选择

Apache flex 如何删除AdvancedDataGrid上的突出显示/选择,apache-flex,flex3,actionscript-3,Apache Flex,Flex3,Actionscript 3,这说明了如何覆盖DataGrid标头的drawHighlightIndicator/drawSelectionIndicators方法,但AdvancedDataGrid在mx_internal中没有“headerClass”。相反,它有一个headerRenderer 如何删除Flex 3中AdvancedDataGrid上的突出显示?绘制AdvancedDataGridBaseEx中的图形调用。如第5468-5471行: var g:Graphics = s.graphics; g.clea

这说明了如何覆盖DataGrid标头的drawHighlightIndicator/drawSelectionIndicators方法,但AdvancedDataGrid在mx_internal中没有“headerClass”。相反,它有一个headerRenderer


如何删除Flex 3中AdvancedDataGrid上的突出显示?

绘制AdvancedDataGridBaseEx中的图形调用。如第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包中(我相信你们中的许多人都知道并且同样知道这一黑客行为的后果)。

很抱歉,我给出了不同的答案,但我没有足够的“要点”直接对此发表评论。今天我遇到了完全相同的问题,发现这篇文章非常有用

如果我错了,请纠正我,但我认为mouseDownHandler中缺少一行,这会阻止AdvancedDataGrid对数据进行正确排序(如果启用了数据排序):

尽管它可能有用

override protected function mouseDownHandler(event:MouseEvent):void
{
    super.mouseDownHandler(event);

    var s:Sprite = Sprite(
        selectionLayer.getChildByName("headerSelection"));

    if(s) s.graphics.clear();
}