3

スクロールのアニメーション化はScrollViewer一般的なタスクのようです。hereのアプローチと同様に、タイマーを使用して実装しました。この方法はうまく機能し、非常にスムーズで完璧に見えました。

ただし、 my に含まれるオブジェクトの複雑さと数ScrollViewerが増加したため、アニメーションが非常にぎくしゃくしたように見えます。手動でスクロールするとうまくいくので、これは奇妙だと思います。

    public void ShiftLeft(int speed = 11)
    {
        CustomTimer timer = new CustomTimer(); //DispatchTimer with "life"
        timer.Interval = new TimeSpan(0, 0, 0, 0, 5);
        timer.Tick += ((sender, e) =>
        {
            scrollViewer1.ScrollToHorizontalOffset(
                scrollViewer1.HorizontalOffset - (scrollViewer1.ScrollableWidth / (gridColumnCount - 3) / speed));
            if (scrollViewer1.HorizontalOffset == 0) //cant scroll any more
                ((CustomTimer)sender).Stop();
            ((CustomTimer)sender).life++;
            if (((CustomTimer)sender).life >= speed) //reached destination
                ((CustomTimer)sender).Stop();
        });
        timer.Start();
    }

この奇妙なけいれんを引き起こしている私のアプローチに問題はありますか? それを修正する方法はありますか?

4

1 に答える 1