为什么向Image添加ManipulationDelta事件处理程序会阻止滚动?

时间:2012-09-11 18:18:57

标签: windows-runtime

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分: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做它的事情要慢得多。如果可能的话应该避免。

希望这有帮助