2010-07-03 51 views

回答

1

图形调用平局是在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包中(我相信你们中的许多人都知道并且同样意识到了后果)。

1

很抱歉发布了一个不同的答案,但我没有足够的'点'来直接评论这个。今天我遇到了完全相同的问题,并发现这个帖子非常有帮助。

纠正我,如果我错了,但我觉得一个线是以防止AdvancedDataGrid从正确排序的数据(如果启用数据排序)的mouseDownHandler丢失:

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

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

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

虽然它可能是有用的。