Как реализовать плавную прокрутку в .NET - PullRequest
2 голосов
/ 01 апреля 2011

Я хочу реализовать плавную / анимированную прокрутку для пользовательского элемента управления в 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 Ответ

3 голосов
/ 01 апреля 2011

Чтобы сделать содержимое прокрутки элемента управления, вы передаете значение AutoScrollPosition в e.Graphics.TranslateTransform ().Это ваш угол, измените значение, которое вы передаете.

Напишите небольшой вспомогательный класс, который наблюдает за значением AutoScrollPosition элемента управления с помощью метода, который вы вызываете в своем методе OnPaint, передавая e.Graphics, чтобы вы могли вызвать его TranslateTransformметод.Когда вы увидите, что это изменится, запишите Environment.TickCount, установите внутренний флаг 'scrollBusy' и запустите таймер на 15 мсек.На каждой отметке таймера вызывайте метод Invalidate () элемента управления, чтобы вычислить новое значение для TranslateTransform при повторном вызове метода.Вычислите приращение от первоначальной к целевой позиции прокрутки, чтобы, скажем, 250 мсек.

...