Question

J'ai un composant de grille et sa piste verticale est définie sur "Auto". Et chaque fois que VerticalScrollBar apparaît ou disparaît, je veux gérer cet événement.

J'ai essayé d'écouter l'événement de redimensionnement:

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

Mais cela ne fonctionne pas: il me semble que l'événement de redimensionnement dépasse réellement avant la mise à jour visuelle de la grille et la barre de défilement apparaît / disparaît. J'ai essayé d'écouter ChildExistenChengedEvent.child_add et childExistencangeDevent.child_remove les événements, mais cela ne fonctionne pas aussi pour moi.

Peut-être que je ne vois pas une solution évidente. Merci d'avance pour toute aide ou conseil.

Était-ce utile?

La solution

Vous ne spécifiez pas quelle grille. (Spark, Mx ou l'un des nôtres (http://www.flexowcious.com/home/ultimate) )

Une chose que vous pourriez faire est de lancer une validatenow avant de vérifier:

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

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

L'autre chose que vous pourriez également faire est d'utiliser une minuterie ou un appel plus tard.

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

Autres conseils

Peut-être pouvez-vous écouter l'événement "show" du ScrollBar lui-même. Quelque chose dans le sens de cela devrait fonctionner:

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

Je n'ai pas testé cela, mais je suis presque sûr que cela devrait fonctionner. (Bien sûr, vous voudrez peut-être renommer onGridResize à quelque chose de plus approprié comme onVerticalScrollShow.)

Au fait, vous n'avez pas à vérifier que le ScrollBar existe; En pur AS3 au moins, ils sont instanciés avec le DataGrid et existent indépendamment de leur ScrollPolicy évaluer.

La raison pour laquelle l'événement de redimensionnement semble se déclencher immédiatement est qu'il est envoyé dès que ses dimensions changent. Je suppose que dans votre application, l'utilisateur s'arrête pour ajuster manuellement la taille de la grille, et donc les événements se déclenchent dès que tout ajustement est effectué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top