Страницы

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

пятница, 12 октября 2018 г.

Сенсорный ScrollBar

Для активации сенсорной прокрутки 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)); }

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

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