Для активации сенсорной прокрутки ScrollViewer достаточно установить PanningMode в Both. Однако, это не даёт возможности использовать Thumb ScrollBar'а при сенсорном взаимодействии. Как включить возможность сенсорной прокрутки за счёт захвата thumb'а?
Ответ
Предлагаю следующее решение:
double thumbHeight, startPos = 0;
private void ScrollViewer_PreviewStylusDown(object sender, StylusDownEventArgs e) {
ScrollViewer scrollViewer = sender as ScrollViewer;
DependencyObject parent = VisualTreeHelper.GetParent(scrollViewer.InputHitTest(e.GetPosition(scrollViewer)) as DependencyObject);
if (parent is System.Windows.Controls.Primitives.Thumb) {
thumbHeight = (parent as System.Windows.Controls.Primitives.Thumb).ActualHeight;
startPos = e.GetPosition(parent as IInputElement).Y;
scrollViewer.PanningMode = PanningMode.None;
Mouse.Capture(scrollViewer);
}
}
private void ScrollViewer_PreviewStylusUp(object sender, StylusEventArgs e) {
Mouse.Capture(null);
(sender as ScrollViewer).PanningMode = PanningMode.Both;
}
private void ScrollViewer_PreviewStylusMove(object sender, StylusEventArgs e) {
ScrollViewer scrollViewer = sender as ScrollViewer;
if (Mouse.Captured != scrollViewer) return;
scrollViewer.ScrollToVerticalOffset(scrollViewer.ScrollableHeight /
(scrollViewer.ActualHeight - thumbHeight) * (e.GetPosition(scrollViewer).Y - startPos));
}
Комментариев нет:
Отправить комментарий