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 unStackPanel
en unScrollViewer
en unaStackPanel
. 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 elScrollViewer
. El controladorhandelXTranslation
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 elScrollViewer
ya no maneja el desplazamiento, probablemente porqueListView
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?