在ScrollViewer
中動畫滾動似乎是一項常見任務。我使用定時器實現它,類似於發現的方法here。這種方法工作得很好,非常光滑,看起來很完美。使用計時器以編程方式滾動ScrollViewer變得生澀
但是,現在我的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();
}
我的方法是否有問題導致這種奇怪的抽搐?任何想法如何解決它?
您是否嘗試過異步操作? System.Timers.Timer是異步的。那麼你只需要處理UI的交叉線程操作。但這並不困難。 – ernest