2010-02-22 3 views
2

У меня есть scrollViewer WPF, который я использую для панорамирования (MouseDown, MouseMove, MouseUp), и я хотел бы включить эффект ускорения, который включает инерцию. Таким образом, если мышь перемещается за пределы пороговой скорости, и я отпускаю мышь, она продолжает кастрюлю, но замедляется как функция начальной скорости. Любые идеи, мысли или примеры?Как включить скорость и/или ускорение в (scrollviewer) WPF?

+0

Вы говорите прокрутку в стиле iPhone на основе жестов мыши? –

+0

Да, более или менее. – Brad

ответ

2

Я сделал это раньше и начал с просмотра ScrollViewer, но в конце концов отбросил его и использовал Viewbox с Canvas в качестве дочернего элемента для абсолютного позиционирования контента (я поддерживал масштабирование aswel как свиток, это было в основном DeepZoom без масштабированных изображений для масштабирования, поэтому при масштабировании вправо была пикселизация). Я написал код для определения направления жестов и скорости жестов из событий мыши и преобразовал его в направление и скорость прокрутки, а затем анимировал свойства Canvas.Left и Canvas.Top прокручиваемого содержимого (которое было в коллекции «Дети» дочернего холста Boxbox) с DoubleAnimation. Он работал хорошо, однако может быть лучший способ ... heres нить, предлагающая хостинг DeepZoom в WPF через элемент управления Frame (хотя я бы этого не делал).

EDIT: В основном ScrollViewer был слишком ограниченным. Даже если вы попадаете в ControlTemplate и получаете ссылки на ScrollBars напрямую, это позиция Thumb этих полос прокрутки, которые вам нужно оживить, и я уверен, что это то, что я нашел, что я не мог сделать (это было почти 3 года назад :)

+0

Отличный пример Саймона. Теперь посмотрим. – Brad