我在我的Windows商店应用程序中使用scrollviewer,但在调用SetHorizontalOffset函数后,有时scrollviewer不会更改水平滚动。垂直滚动同样的事情。有人知道如何使用它吗?可能只是滚动查看器滚动以获得偏移的可见性(我的意思是,如果它看到用户可以看到偏移它根本不滚动)
答案 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)以确保不断绘制帧。