我在尝试添加像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”。我尝试过“缩放”,但这没有帮助。
谢谢!
答案 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),则没有好的解决方案。在这种情况下,到处获取指针消息的唯一选择是在所有地方禁用直接操作,但也禁用滚动。要获得该功能,应用程序将需要检测滚动手势本身,然后使用ScrollToHorizontalOffset或ScrollToVerticalOffset或通过更新SelectedIndex将ScrollViewer导航到新位置。这很棘手,并且比让ScrollViewer做它的事情要慢得多。如果可能的话应该避免。
希望这有帮助