Windows 8的Scrollviewer在缩放后无法正确平移

本文关键字:Scrollviewer 缩放 Windows | 更新日期: 2023-09-27 17:58:37

我的滚动查看器上的放大按钮有问题。

查看器内部是一个网格。在这个网格里面是一堆按照特定顺序排列的图像。理想情况下,我想通过点击按钮从一个图像转到另一个图像,我已经实现了这一点。我有一个功能强大的缩小按钮,但当我放大时…它不会滚动到我想要的位置。我使用图像的边距滚动到它。

我似乎遇到的问题是,可滚动的高度和宽度不会更新。

当按下缩小键时,我呼叫:

zoomFactor = 1;
rosaryScroll.ZoomToFactor(zoomFactor);
rosaryScroll.InvalidateScrollInfo();
setRosaryState(rosaryState);

将念珠状态滚动设置为查看器中的特定图像,方法是使用其边距和滚动查看器的大小将图像居中放置在滚动查看器上。

rosaryScroll.ScrollToHorizontalOffset(
     (selectedBead.Margin.Left
     + (selectedBead.Width / 2)
     + rosaryScroll.Margin.Left / 2)
     * zoomFactor);
rosaryScroll.ScrollToVerticalOffset(
     (selectedBead.Margin.Top
     - (selectedBead.Height / 2)
     - rosaryScroll.Margin.Top / 2)
     * zoomFactor);

当我缩小(zoomFactor为5)时,可滚动的高度/宽度很好,很容易滚动。rosaryScroll.ScrollableHeight=2336.0双rosaryScroll.ScrollableWidth=2584.0双

但当我放大(zoomFactor为1)时,可滚动的高度/宽度仍然很小rosaryScroll.ScrollableHeight=84.0双rosaryScroll.ScrollableWidth=0.0双

那么,如何在缩放调用后更新此"可滚动高度"answers"宽度"呢?InvalidateScrollInfo()似乎无效。。。

Windows 8的Scrollviewer在缩放后无法正确平移

我会考虑放弃使用ScrollViewer,并根据操作事件和渲染转换推出自己的解决方案。正如您所注意到的,ScrollViewer并不是为简单的编程操作而编写的,它将使您很难实现任何它不是为之设计的自定义行为。属性不会根据请求立即更新,您可能需要等待一些事件(例如ViewChanged)才能看到新值。你可以尝试使用我写的扩展来设置偏移和缩放因子值的动画,但请注意,这些有点过时,有些人的行为有问题。