【问题标题】:Windows store app ScrollViewer.ChangeView() not workingWindows 商店应用 ScrollViewer.ChangeView() 不工作
【发布时间】:2015-03-16 00:21:51
【问题描述】:

试图在双击事件触发的 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 在调用它之前的缩放系数是多少?第二次双击后怎么样?
  • 抱歉耽搁了。当我放大并使用缩放系数设置器 ZoomToFactor() 命令时,缩放系数 > 1,它按照命令返回 1,但会立即返回。只是 ChangeView 命令由于某种原因似乎不起作用。

标签: c# windows-store-apps scrollviewer


【解决方案1】:

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

真的很奇怪,但它有效。

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

【讨论】:

    【解决方案2】:

    找到的解决方案: 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 行。 请记住将调用中的最后一个布尔值设置为 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多