Toque Scrolling ScrollViewer en la aplicación WPF con RealTimeStylus desactivado
windows-8 touchscreen (2)
¿Puedes probar SurfaceScrollViewer en lugar de ScrollViewer normal?
Estamos trabajando en una aplicación WPF 4.5 que se ejecutará en computadoras con Windows 8 con monitores táctiles.
Hemos deshabilitado la compatibilidad con RealTimeStylus siguiendo las instrucciones de MSDN , ya que tenemos algunas vistas que necesitan compatibilidad multitáctil a través de WM_TOUCH.
El problema es que deshabilitar el soporte de RealTimeStylus también parece deshabilitar la capacidad del usuario para desplazarse en un ScrollViewer mediante el toque: normalmente el usuario puede desplazarse por los ScrollViewers con sus dedos, pero si el soporte de RealTimeStylus está deshabilitado, no parece posible hacerlo. El PanningMode de ScrollViewer está configurado en "Ambos".
¿Es posible combinar estas cosas en una aplicación WPF, o son mutuamente excluyentes?
Otra opción es agregar botones de flecha alrededor del contenido. Hemos utilizado esto con gran efecto en un quiosco de pantalla táctil. Es un poco más de trabajo, pero podría convertirse en un control personalizado. El único código que tengo es compatible con el desplazamiento vertical.
Debería ser lo suficientemente fácil para agregar desplazamiento horizontal también. En el código a continuación, hay dos botones, llamados Menos y Más por encima y por debajo del control de desplazamiento.
double Epsilon = .001;
private void Scroller_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if ( Scroller.ScrollableHeight > 0 ) {
Less.Visibility = Math.Abs(Scroller.VerticalOffset - 0) > Epsilon ? Visibility.Visible : Visibility.Hidden;
More.Visibility = Scroller.VerticalOffset + Scroller.ViewportHeight < Scroller.ExtentHeight ? Visibility.Visible : Visibility.Hidden;
} else {
Less.Visibility = More.Visibility = Visibility.Hidden;
}
if (Scroller.ExtentHeight / Scroller.ViewportHeight > 2)
{
SearchPanel.Visibility = Visibility.Visible;
}
}
private void Less_Click(object sender, RoutedEventArgs e)
{
Sounds.Click();
Scroller.PageUp();
}
private void More_Click(object sender, RoutedEventArgs e)
{
Sounds.Click();
Scroller.PageDown();
}