Windows商店应用程序中的ScrollViewer.ChangeView()无法工作

7

尝试在 Windows 商店应用程序中,通过双击事件来实现滚动视图的缩小。

这是应该发生的代码:

private void MainPhotoDisplay_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
    MainPhotoDisplayscrollViewer.ChangeView(null, null, 1.0F,true);
}

但是,如果我在模拟器中放大,然后双击,什么也不会发生。事件确实触发并且方法也被执行,但是视图仍然保持放大状态。
这里是相关文档:http://msdn.microsoft.com/en-us/library/windows/apps/dn252762.aspx 这个过时的方法:
 MainPhotoDisplayscrollViewer.ZoomToFactor(1);

这段代码可以正常运行,但遗憾的是它没有动画效果,这会导致用户体验不佳。而且这不是我想要的。

有什么想法,为什么没有任何反应?


当您在那里设置断点时,在调用ScrollViewer之前的缩放因子是多少?第二次双击后呢? - Nate Diamond
抱歉耽搁了。当我放大并使用缩放因子设置器ZoomToFactor()命令将缩放因子设置为> 1时,它会立即返回到1,但是无法使用ChangeView命令,原因不明。 - Essah
2个回答

13

另一个解决方案是在指令之前添加Task.Delay调用。

非常奇怪,但它起作用了。

await Task.Delay(1);
scroller.ChangeView(null, null, null, false); // whatever

8
解决方案已找到:http://social.msdn.microsoft.com/Forums/windowsapps/en-US/c3eac347-fe08-41bd-98cb-d97b6f260873/double-tap-to-zoom-image-windows-81-scrollviewerchangeview?forum=winappswithcsharp 这里标记为解决方案的帖子实际可行,但如果在具有相应滚动视图控件的页面的代码后台中运行代码,则不需要事件的前三行。请记得将最后一个“bool”设置为false以显示动画。
var period = TimeSpan.FromMilliseconds(10);
        Windows.System.Threading.ThreadPoolTimer.CreateTimer(async (source) =>
        {
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                var Succes = MainPhotoDisplayscrollViewer.ChangeView(null, null, 1.0F, false);
            });
        }, period);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接