Как реализовать плавную прокрутку in.NET
Я хочу реализовать плавную / анимированную прокрутку для пользовательского элемента управления в C#. Я хочу что-то похожее на следующий пример javascript:
Http://www.kryogenix.org/code/browser/smoothscroll/#p0
Моя первая идея-переместить полосы прокрутки в целевую точку, но остановиться в промежуточных точках. Например, это очень упрощенная идея:
public void SetSrollValue(int x)
{
// assume right scrolling
float step = x / 10;
while (scroll.Value < x)
{
scroll.Value += step;
}
}
Мои вопросы:
- должен ли я реализовать это в потоке?
- будет ли это окрашено плавно (я полагаю, что да, если у меня есть двойной буфер, активированный в моем контроле)
Итак, если вы знаете какой-либо хороший пример, статью, руководство или подобное, пожалуйста, не могли бы вы предоставить ссылку здесь?
Заранее благодарю.
1 ответ:
Чтобы сделать содержимое элемента управления прокруткой, вы передаете значение AutoScrollPosition в e. Graphics.Translatetransform с(). Это ваш угол, измените значение, которое вы передаете.
Напишите небольшой вспомогательный класс, который наблюдает значение AutoScrollPosition элемента управления с помощью метода, вызываемого в методе OnPaint, передавая e. Graphics, чтобы можно было вызвать его метод TranslateTransform. Когда вы увидите, что он меняется, запишите окружение.TickCount, установите внутренний флаг 'scrollBusy' и запустите 15 таймер мсек. На каждом ТИКе таймера вызывайте метод Invalidate () элемента управления, чтобы вычислить новое значение для TranslateTransform при повторном вызове метода. Вычислите приращение от исходного до целевого положения прокрутки, чтобы оно заняло, скажем, 250 мс.