0

我有一个 Grid 组件,它的 verticalScrollPolicy 设置为“auto”。并且每次verticalScrollBar出现或消失时,我都想处理这个事件。

我试图听 RESIZE 事件:

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

但它不起作用:在我看来,RESIZE 事件实际上是在网格视觉更新和滚动条出现/消失之前调度的。我也尝试收听 ChildExistenceChangedEvent.CHILD_ADD 和 ChildExistenceChangedEvent.CHILD_REMOVE 事件,但这对我也不起作用。

也许我只是没有看到一些明显的解决方案。提前感谢您的任何帮助或建议。

4

2 回答 2

2

您不指定哪个网格。(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.
    }
于 2013-11-10T02:44:49.650 回答
0

也许你可以监听ScrollBar它本身的“show”事件。类似这样的东西应该可以工作:

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

我没有对此进行测试,但我很确定它应该可以工作。(当然,您可能想重命名onGridResize为更合适的名称,例如onVerticalScrollShow.)

顺便说一句,您不必检查ScrollBar存在;至少在纯 AS3 中,它们与 the 一起实例化DataGrid并且无论它们的ScrollPolicy值如何都存在。

resize 事件似乎立即触发的原因是因为它在其尺寸发生变化时立即被调度。我假设在您的应用程序中,用户拖动以手动调整网格的大小,因此一旦进行任何调整,事件就会触发。

于 2013-11-08T09:19:14.437 回答