我刚开始使用WP8.1的应用程序,遇到拦截触摸移动事件的问题,同时保留原始事件处理。
我想做的是以下内容:
ListView
中的StackPanel
ScrollViewer
中Grid
ScrollViewer
。 ScrollViewer处理StackPanel / ListView的垂直滚动。听起来很简单,但我试过的任何方式似乎取消ManipulationMode="TranslationX" ManipulationDelta="handleXTranslation"
的原始触摸移动处理,因此垂直滚动不再起作用。我真的很讨厌自己实现整个滚动行为......
我已经尝试过了:
ScrollViewer
上放置handelXTranslation
。无论出于何种原因,都不会调用ListView
处理程序。ScrollViewer
上放置相同的操作信息 - 现在处理程序被调用(以及父ui元素的所有处理程序),但ListView
不再处理滚动,可能是因为{ {1}}不再将该事件传播给其父母。ScrollViewer
的滚动就不再进行了。XAML代码看起来像这样(剥离了一些数据):
<Grid x:Name="LayoutRoot" Background="Transparent" ManipulationMode="TranslationX" ManipulationDelta="gridTranslationX">
<ScrollViewer x:Name="ScrollViewer" ManipulationMode="TranslationX" ManipulationDelta="scrollViewerTranslationX">
<StackPanel x:Name="StackPanel" Orientation="Horizontal" ManipulationMode="TranslationX" ManipulationDelta="scrollViewerTranslationX">
<ListView x:Name="ListView" ManipulationMode="TranslationX" ManipulationDelta="scrollViewerTranslationX">
</ListView>
</StackPanel>
</ScrollViewer>
</Grid>
我尝试在代码中安装的处理程序如下所示:
this.AddHandler(UIElement.ManipulationDeltaEvent, new ManipulationDeltaEventHandler(genericDeltaHandler), true);
ListView.PointerMoved += new PointerEventHandler(pointerEvent);
有没有办法在不干扰正常治疗的情况下观察操纵事件?
答案 0 :(得分:2)
有时谈论它会有所帮助;-) ......
答案确实就像将{strong> System
值添加到ManipulationMode
上的ListView
一样简单:
<ListView x:Name="ListView" ManipulationMode="TranslateX,System" ManipulationDelta="translationX">