スクロールのアニメーション化は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();
}
この奇妙なけいれんを引き起こしている私のアプローチに問題はありますか? それを修正する方法はありますか?