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

时间:2010-07-03 02:30:44

标签: flex flex3 actionscript-3

这个page描述了如何覆盖DataGrid标题的drawHighlightIndicator / drawSelectionIndicators方法,但是AdvancedDataGrid在mx_internal中没有“headerClass”。它改为有一个headerRenderer。

如何在Flex 3中的AdvancedDataGrid上删除那些爆破的高光?

2 个答案:

答案 0 :(得分:1)

从5468-5471行中调用AdvancedDataGridBaseEx.as中的图形调用:

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包中(我相信很多人都知道并且同样意识到后果)。

答案 1 :(得分:1)

很抱歉发布不同的答案,但我没有足够的“积分”对此做出直接评论。今天我遇到了完全相同的问题,发现这篇文章非常有帮助。

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

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

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

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

虽然它可能有用。