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.