#c_sharp #wpf
Для активации сенсорной прокрутки ScrollViewer достаточно установить PanningMode в Both. Однако, это не даёт возможности использовать Thumb ScrollBar'а при сенсорном взаимодействии. Как включить возможность сенсорной прокрутки за счёт захвата thumb'а?
Ответы
Ответ 1
Предлагаю следующее решение: 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)); }
Комментариев нет:
Отправить комментарий