Xaml ScrollViewer和SetHorizontalOffset

Xaml ScrollViewer和SetHorizontalOffset,xaml,microsoft-metro,windows-store-apps,scrollviewer,Xaml,Microsoft Metro,Windows Store Apps,Scrollviewer,我在windows应用商店应用程序中使用scrollviewer,但在调用SetHorizontalOffset函数后,scrollviewer有时不会更改水平滚动。垂直滚动也是如此。有人知道如何使用它吗?可能是scrollviewer scroll仅用于显示偏移量(我的意思是,如果用户看到偏移量,则其根本不会滚动)它显示scrollviewer的偏移量滞后一帧 如果以下代码每帧运行一次,diffPrevDesiredActual始终为0。也就是说,ChangeView提供的值不会立即生效

我在windows应用商店应用程序中使用scrollviewer,但在调用SetHorizontalOffset函数后,scrollviewer有时不会更改水平滚动。垂直滚动也是如此。有人知道如何使用它吗?可能是scrollviewer scroll仅用于显示偏移量(我的意思是,如果用户看到偏移量,则其根本不会滚动)

它显示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)以确保不断绘制帧。

您确定正确计算了偏移量吗?确保偏移量小于
可滚动宽度/高度
。如果您想滚动到内容末尾之外,则需要在内容末尾添加一些缓冲区空间。