2013-08-15 32 views
25

Pracujemy nad aplikacją WPF 4.5, która będzie działać na komputerach z systemem Windows 8 z monitorami z ekranem dotykowym.Touch Scrolling ScrollViewer w aplikacji WPF z wyłączonym RealTimeStylus

Wyłączyliśmy obsługę RealTimeStylus po the directions on the MSDN, ponieważ mamy kilka widoków, które wymagają obsługi multitouch przez WM_TOUCH.

Problem polega na tym, że wyłączenie obsługi RealTimeStylus wydaje się również uniemożliwić użytkownikowi przewijanie ScrollViewer za pomocą dotyku - zwykle użytkownik może przesuwać palcami po ekranie ScrollViewers, ale jeśli obsługa RealTimeStylus jest wyłączona, nie wydaje się możliwe Zrób to. Tryb Panning ScrollViewer jest ustawiony na "Both".

Czy można łączyć te rzeczy w aplikacji WPF, czy też wzajemnie się wykluczają?

Odpowiedz

1

Inną opcją jest dodanie przycisków strzałek wokół treści. Wykorzystaliśmy to do świetnego efektu na kiosku z ekranem dotykowym. To trochę więcej pracy, ale można ją przekształcić w niestandardową kontrolę. Jedyny kod, który mam obsługuje przewijanie w pionie.

Dodanie przewijania poziomego powinno być również łatwe. W poniższym kodzie są dwa przyciski o nazwie "Mniej i więcej" nad i pod przewijakiem.

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