c# wpf touch windows-phone-8.1 manipulationdelta

c# - Problemas al interceptar ManipulationDelta en WP8.1



wpf touch (1)

A veces ayuda hablar de eso ;-) ...

La respuesta fue de hecho tan simple como agregar el valor del System a ManipulationMode en el ListView :

<ListView x:Name="ListView" ManipulationMode="TranslateX,System" ManipulationDelta="translationX">

Acabo de comenzar con una aplicación para WP8.1 y encuentro un problema con la interceptación de eventos de movimiento táctil mientras dejo el tratamiento de evento original en su lugar.

Lo que quiero hacer es lo siguiente:

  • Tengo un ListView en un StackPanel en un ScrollViewer en una StackPanel . ScrollViewer maneja el desplazamiento vertical de StackPanel / ListView.
  • Cada vez que aparece un movimiento táctil horizontal, me gustaría recibir una notificación para que pueda ajustar la posición de algún elemento ui en función del movimiento horizontal.

Suena bastante simple, pero cualquier forma que intenté parece cancelar el tratamiento de movimiento táctil original por el ScrollViewer , por lo que el desplazamiento vertical ya no funciona. Realmente odiaría implementar todo el comportamiento de desplazamiento yo mismo ...

Ya lo intenté:

  • Poniendo un ManipulationMode="TranslationX" ManipulationDelta="handleXTranslation" en el ScrollViewer . El controlador handelXTranslation nunca se llama por ningún motivo.
  • Colocando la misma información de manipulación en ListView : ahora se llama al controlador (y a todos los controladores de los elementos de la interfaz de usuario principal), pero el ScrollViewer ya no maneja el desplazamiento, probablemente porque ListView ya no está propagando el evento a sus padres.
  • Agregar un controlador táctil general a la clase xaml cuando se carga. Mismo problema: o no se llama, y ​​si se llama, el desplazamiento del ScrollViewer ya no está hecho.

El código XAML se ve así (sin algunos datos):

<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>

Y los controladores que intenté instalar en el código se ven así:

this.AddHandler(UIElement.ManipulationDeltaEvent, new ManipulationDeltaEventHandler(genericDeltaHandler), true); ListView.PointerMoved += new PointerEventHandler(pointerEvent);

¿Hay alguna forma de observar los eventos de manipulación sin alterar su tratamiento normal?