Как убрать выделение / выделение на AdvancedDataGrid - PullRequest
1 голос
/ 03 июля 2010

Эта страница описывает, как переопределить методы drawHighlightIndicator / drawSelectionIndicators для заголовка DataGrid, но AdvancedDataGrid не имеет "headerClass" в mx_internal. Вместо этого у него есть headerRenderer.

Как я могу удалить эти выделенные блики поверх AdvancedDataGrid в Flex 3?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Извините, что опубликовал другой ответ, но у меня недостаточно «баллов», чтобы сделать прямой комментарий по этому вопросу. Сегодня я столкнулся с точно такой же проблемой и нашел этот пост очень полезным.

Поправьте меня, если я ошибаюсь, но я думаю, что в mouseDownHandler отсутствует одна строка, которая не позволяет AdvancedDataGrid правильно сортировать данные (если сортировка данных включена):

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

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

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

Хотя это может быть полезно.

1 голос
/ 03 июля 2010

Графические вызовы, которые рисуются в 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 (хак, я уверен, что многие из вас знают и одинаково знают о последствиях).

...