2013-08-15 17 views
25

Wir arbeiten an einer WPF 4.5-Anwendung, die auf Windows 8-Computern mit Touchscreen-Monitoren ausgeführt wird.Touch Scrolling ScrollViewer in WPF-App mit RealTimeStylus deaktiviert

Wir haben die Unterstützung für RealTimeStylus nach the directions on the MSDN deaktiviert, da wir einige Ansichten haben, die Multitouch-Unterstützung über WM_TOUCH benötigen.

Das Problem ist, dass die Deaktivierung der RealTimeStylus-Unterstützung auch die Fähigkeit des Benutzers deaktiviert, einen ScrollViewer mit Touch zu scrollen - normalerweise kann der Benutzer ScrollViewers mit den Fingern schwenken, aber wenn RealTimeStylus-Unterstützung deaktiviert ist, scheint es nicht möglich mach das. Der PanningMode des ScrollViewers ist auf "Beide" eingestellt.

Ist es möglich, diese Dinge in einer WPF-Anwendung zu kombinieren, oder schließen sie sich gegenseitig aus?

Antwort

1

Eine weitere Option ist Pfeiltasten um den Inhalt hinzuzufügen. Wir haben das sehr gut an einem Touchscreen-Kiosk genutzt. Es ist ein bisschen mehr Arbeit, könnte aber zu einem benutzerdefinierten Steuerelement gemacht werden. Der einzige Code, den ich habe, unterstützt vertikales Scrollen.

Es sollte einfach genug sein, auch horizontales Scrollen hinzuzufügen. Im folgenden Code befinden sich zwei Schaltflächen, die oberhalb und unterhalb des Scrollers als Less and More bezeichnet werden.

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(); 
    }