2011-05-15 90 views
2

我想在未設置Duration的情況下創建動畫,而是根據絕對速度設置進行計算。例如。我希望動畫以100像素/秒的速度發生,並且持續時間根據「來源」和「來源」值自動計算。如果路徑爲350像素,則動畫將花費3.5秒完成。恆定速度的silverlight動畫

Duration.Automatic不適用於此。另外Animation.SpeedRatio是不同的事情。

我當然可以計算從路徑長度的持續時間,但我會有很多物體在屏幕上移動,每個創建和刪除程序的方式,並親自發現它笨拙,以此打擾。

什麼是一個很好的解決方案?在Silverlight 4或更高版本中是否存在任何內置行爲?

虛代碼:

DoubleAnimation ani = new DoubleAnimation(); 
ani.From = 0; 
ani.To = 200; 
ani.AbsoluteSpeed = "300 pixels/sec"; 
storyBoard1.Begin(); // now my animation will take 0.66 sec 
+0

基於你的「虛擬代碼」會成爲你的偏好,你不會爲了不簡單地使用'ani.Duration = new Duration(TimeSpan.FromSeconds(200/300))'而做一個很好的例子嗎?請添加更多關於您對此方法的異議的詳細信息。 – AnthonyWJones 2011-05-15 20:14:25

+0

沒有人反對。正如我上面所說,這感覺很笨拙。 – 2011-05-15 20:53:43

回答

0

使用如下代碼: -

ani.Duration = new Duration(TimeSpan.FromSeconds(200/myPixelsPerSecond)) 

這是在所有的 「笨拙」。

如果使用這樣一個相當直接的表達式會增加新的屬性,那麼如果將相同的方法應用於其餘的可用API,會發生什麼?這些「有用」屬性的集合將擴展到難以管理的級別。這個API將被類似屬性的無數重量所粉碎,所有這些都會執行相當簡單的表達式來設置真正的屬性。

優雅(與clusmy相反)有一小組精心挑選的屬性,可以使用簡單的表達式以百分比的方式進行組合。完全如上。