ScrollViewer和SetHorizo​​ntalOffset

时间:2013-07-07 18:26:19

标签: xaml microsoft-metro windows-store-apps scrollviewer

我在我的Windows商店应用程序中使用scrollviewer,但在调用SetHorizo​​ntalOffset函数后,有时scrollviewer不会更改水平滚动。垂直滚动同样的事情。有人知道如何使用它吗?可能只是滚动查看器滚动以获得偏移的可见性(我的意思是,如果它看到用户可以看到偏移它根本不滚动)

1 个答案:

答案 0 :(得分:0)

看起来ScrollViewer的偏移滞后一帧。

如果每帧都运行以下代码,则diffPrevDesiredActual始终为0.也就是说,ChangeView提供的值不会立即生效。

    ...
        var scrollPosition = /*some new value*/;

        MyScrollViewer.ChangeView(null, scrollPosition, null, true);

        var current = MyScrollViewer.VerticalOffset;
        var diffDesiredActual = scrollPosition - current;
        var diffPrevDesiredActual = previous - current;

        previous = scrollPosition;
    ...

    private double previous;

如果更改滚动偏移时屏幕上没有任何动画,则ScrollViewer可能不会显示新值,直到触发新帧的绘制。要测试此假设,请尝试添加无限动画(例如ProgressRing)以确保不断绘制帧。