wpf popup touch pixelsense

wpf - SurfaceScrollViewer: obtener contacto en niños anidados



popup touch (2)

Bajo las cubiertas, Popup crea otro hwnd para renderizar su contenido. Esto es diferente de todos los demás controles de WPF. Debe registrar este hwnd con Surface SDK para que comience a enviarle eventos táctiles. Use esto para hacer eso: http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.input.touchextensions.enablesurfaceinput.aspx

Tengo la siguiente pieza de código, que es parte de un WPF 4 UserControl:

<Popup x:Name="CantoPopup" IsOpen="False" PlacementRectangle="50,-100,500,120" AllowsTransparency="True" PopupAnimation="Fade" StaysOpen="True" Width="500" Height="120"> <Border BorderBrush="#FF120403" BorderThickness="1" CornerRadius="10" Background="#FF9350"> <s:SurfaceScrollViewer x:Name="IndexScroller" Width="500" Height="120" Margin="10" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Visible"> <DockPanel x:Name="InnerIndexPanel" /> </s:SurfaceScrollViewer> </Border> </Popup>

El DockPanel se rellena en el código subyacente con una colección de TextBlocks. Básicamente, estoy tratando de crear una lista horizontal desplazable de elementos tangibles.

Ahora, me gustaría detectar qué bloque de texto tocó el usuario. Sin embargo, ni agregar un manejador de eventos TouchDown a los TextBlocks ni utilizar TouchExtensions para manejar los gestos de toque funcionó. ¿Puede alguien indicarme el camino correcto?


Descubrí que el punto es que el componente Popup tiene algunas peculiaridades :) En este caso, parece que no detectó ni eventos TouchDown ni PreviewTouchDown. Por lo tanto, recurrí a la creación de un control de usuario hecho de un lienzo que contiene el código anterior y luego hacer ese control visible sobre el resto cada vez que necesitaba abrir la ventana emergente. No sé si esta es la mejor solución, pero ahora reacciona como se esperaba.