Windows商店应用ScrollViewer.ChangeView()无法正常工作

时间:2014-03-20 14:22:19

标签: c# windows-store-apps scrollviewer

尝试在双击事件触发的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);

工作正常,但遗憾的是它没有动画,这会导致糟糕的用户体验。并不是我想要的。

关于为什么没有发生的任何想法?

2 个答案:

答案 0 :(得分:9)

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

真的很奇怪,但它确实有效。

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

答案 1 :(得分: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

标记为解决方案的帖子实际上有效,但是如果您使用有问题的scrollViewer在页面的代码隐藏中运行代码,则不需要事件的前3行。 记得将调用中的最后一个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);