3

我在尝试将诸如捏缩放之类的功能添加到在 FlipView 内的 ScrollView 内具有 Image 控件的应用程序时遇到问题。Image 控件和 ScrollView 控件在 FlipView 的 ItemTemplate 中。

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

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

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

谢谢!

4

1 回答 1

0

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-08-28T19:01:07.867 回答