2012-09-11 29 views
3

我在尝试添加功能(如捏合缩放)到一个应用程序时遇到问题,该应用程序在FlipView内部的ScrollView内部具有Image控件。 Image控件和ScrollView控件位于FlipView的ItemTemplate中。为什么向图像添加ManipulationDelta事件处理程序会阻止滚动?

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

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

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

谢谢!

回答

0

WinRT中的ScrollViewer针对性能进行了优化,并在引擎盖下使用DirectManpulation。这就是为什么从ScrollViewer进行滚动并在里面进行手势很棘手的原因。

这罗布·卡普兰(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的功能要慢很多。如果可能的话应该避免。

希望这会有帮助

相关问题