Обнаружение появления / исчезновения полосы прокрутки в сетке

StackOverflow https://stackoverflow.com/questions/19852915

Вопрос

У меня есть компонент Grid, и для его verticalScrollPolicy установлено значение "auto".И каждый раз, когда появляется или исчезает VerticalScrollbar, я хочу обработать это событие.

Я попытался прослушать событие ИЗМЕНЕНИЯ РАЗМЕРА:

    private function onGridResize(event:Event):void
    {
       if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
       {
           trace("scroll on");
       }
       else
       {
           trace("scroll off");
       }
    }

но это не работает:мне кажется, что событие ИЗМЕНЕНИЯ размера на самом деле отправляется до того, как визуальное обновление сетки и полоса прокрутки появятся / исчезнут.Я также пытался прослушать события ChildExistenceChangedEvent.CHILD_ADD и ChildExistenceChangedEvent.CHILD_REMOVE, но у меня это тоже не работает.

Может быть, я просто не вижу какого-то очевидного решения.Заранее благодарю за любую помощь или совет.

Это было полезно?

Решение

Вы не указываете, какая именно сетка.(Spark, MX или один из наших (http://www.flexicious.com/Home/Ultimate) )

Одна вещь, которую вы могли бы сделать, это создать validateNow перед проверкой:

private function onGridResize(event:Event):void
    {
       _grid.validateNow(); //add this.

       if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
       {
           trace("scroll on");
       }
       else
       {
           trace("scroll off");
       }
    }

Другая вещь, которую вы также могли бы сделать, - это использовать таймер или позвонить позже.

private function onGridResize(event:Event):void
    {
       callLater(checkForScrollBar); //check for scrollbar would have the code above.
    }

Другие советы

Возможно, вы сможете прослушать событие "шоу" в ScrollBar сам по себе.Что-то вроде этого должно сработать:

_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW, onGridResize);

Я не тестировал это, но я почти уверен, что это должно сработать.(Конечно, вы можете захотеть переименовать onGridResize к чему-то более подходящему, например onVerticalScrollShow.)

Кстати, вам не обязательно проверять, что ScrollBar существует;по крайней мере, в чистом AS3 они создаются вместе с DataGrid и существуют независимо от их ScrollPolicy ценность.

Причина, по которой событие изменения размера срабатывает сразу, заключается в том, что оно отправляется, как только изменяются его размеры.Я предполагаю, что в вашем приложении пользователь перетаскивает, чтобы вручную настроить размер сетки, и, таким образом, события запускаются, как только производится какая-либо корректировка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top