1

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

查看器的内部是一个网格。在该网格内部是一堆按特定顺序排列的图像。理想情况下,我想通过单击按钮从图像转到图像,并且我已经实现了这一点。我有一个正常工作的缩小按钮,但是当我放大时......它不会滚动到我想要的位置。我使用图像的边距滚动到它。

我似乎遇到的问题是可滚动的高度和宽度没有更新。

当按下缩小时,我调用:

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 double rosaryScroll.ScrollableWidth= 0.0 double

那么在我的缩放调用之后如何更新这个 Scrollable Height 和 Width 呢?InvalidateScrollInfo() 似乎无效...

4

1 回答 1

1

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

于 2013-02-09T05:50:17.810 回答