【问题标题】:Why does adding a ManipulationDelta event handler to an Image prevent scrolling?为什么将 ManipulationDelta 事件处理程序添加到 Image 会阻止滚动?
【发布时间】:2012-09-04 17:32:58
【问题描述】:

我在尝试向一个应用程序添加像捏缩放这样的功能时遇到了一个问题,该应用程序在 ScrollView 内具有 Image 控件,该应用程序位于 FlipView 内。 Image 控件和 ScrollView 控件在 FlipView 的 ItemTemplate 中。

这个想法是,如果用户捏合缩放图像,它将激活代码,该代码将在图像控件中创建并显示图像的放大版本。 (本例中的 Image 控件包含一个 PDF 页面,因此我们需要更大版本的 PDF 页面,而不是 PDF 页面的放大和模糊视图)。

如果我将 ManipulationDelta 事件处理程序附加到图像,它捕获由捏缩放手势产生的 ManipulationDelta 事件,然后我可以使用它来创建 PDF 缩放效果。但是......现在它不会捕捉滚动(拖动?)手势。或者更确切地说,这些也被 ManipulationDelta 事件处理程序捕获。我宁愿避免此时必须实现代码来以编程方式处理滚动。我是否有任何选项可以以某种方式将 ManipulationDelta 事件冒泡(或“结束”?)以处理滚动?我认为这已经发生了,事件会冒泡到 ScrollView,然后它会处理滚动。但它似乎不是那样发生的。

我在 ManipulationDelta 事件处理程序中将 e.Handled 设置为 false。并且 IMage 控件上的 ManipulationMode 设置为“All”。我试过“Scale”,但这没有帮助。

谢谢!

【问题讨论】:

    标签: windows-runtime


    【解决方案1】:

    WinRT 中的 ScrollViewer 针对性能进行了优化,并在后台使用 DirectManpulation。这就是为什么同时在 ScrollViewer 中滚动和在其中使用手势很棘手的原因。

    Rob Caplan(MS 员工)的这篇博文提供了更多信息: http://blogs.msdn.com/b/wsdevsol/archive/2013/02/16/where-did-all-my-gestures-go.aspx

    不幸的是,如果应用需要滚动和手势(例如,针对滚动检测 CrossSlides),则没有好的解决方案。在这种情况下,在任何地方获取指针消息的唯一选择是在任何地方禁用直接操作,但这也会禁用滚动。为了恢复它,应用程序需要检测滚动手势本身,然后使用 ScrollToHorizo​​ntalOffset 或 ScrollToVerticalOffset 或通过更新 SelectedIndex 将 ScrollViewer 导航到新位置。这很棘手,并且比让 ScrollViewer 完成它的事情要慢得多。应尽可能避免。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2023-02-22
      • 2021-02-26
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多