Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Сенсорный ScrollBar

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

Комментариев нет:

Отправить комментарий