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

时间:2013-02-08 20:51:27

标签: c# windows-runtime windows-store-apps winrt-xaml scrollviewer

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

观众内部是一个网格。并且在该网格内部是以特定顺序布置的一堆图像。理想情况下,我想通过按钮点击从图像到图像,我已经实现了这一点。我有一个功能缩小按钮,但当我放大...它不滚动到我想要的地方。我使用图像的边距滚动到它。

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

按下缩小功能后,我打电话:

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 double

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

那么如何在缩放调用后更新此Scrollable高度和宽度? InvalidateScrollInfo()似乎无效......

1 个答案:

答案 0 :(得分:1)

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