Pergunta

Eu tenho um componente de grade e seu verticalScrollPolicy está definido como "AUTO". E toda vez que o verticalscrollbar aparece ou desaparece, quero lidar com este evento.

Eu tentei ouvir o evento de redimensionamento:

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

Mas não funciona: parece -me que o evento redimensiona realmente despacha antes que a atualização visual da grade e a barra de rolagem apareçam/desapareçam. Tentei ouvir ChildExistencechangedEvent.child_add e ChildExistencechangedEvent.child_remove eventos também, mas isso também não funciona para mim.

Talvez eu simplesmente não veja uma solução óbvia. Agradecemos antecipadamente por qualquer ajuda ou aconselhamento.

Foi útil?

Solução

Você não especifica qual grade. (Spark, Mx ou um dos nossos (http://www.flexicious.com/home/ultimate) )

Uma coisa que você pode fazer é jogar um validatenow antes de verificar:

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

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

A outra coisa que você também pode fazer é usar um cronômetro ou ligar mais tarde.

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

Outras dicas

Talvez você possa ouvir o evento "show" do ScrollBar em si. Algo como deve funcionar:

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

Não testei isso, mas tenho certeza de que deve funcionar. (Claro, você pode querer renomear onGridResize Para algo mais adequado como onVerticalScrollShow.)

A propósito, você não precisa verificar se o ScrollBar existe; No AS3 puro, pelo menos, eles são instanciados junto com o DataGrid e existe independentemente de seus ScrollPolicy valor.

A razão pela qual o evento de redimensionamento parece disparar imediatamente é porque é despachado assim que suas dimensões mudarem. Suponho que, em seu aplicativo, o usuário arraste para ajustar manualmente o tamanho da grade e, portanto, os eventos incendem assim que qualquer ajuste for feito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top