此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();
}
雖然它可能是有用的。