我發現很棒的Silverlight儀表板演示@http://blog.allaboutprogress.com/2010/04/silverlight-dashboards-part-i/如何讓Silverlight動畫/應用程序在WPF中同樣工作?
但是,我想讓應用程序在WPF中工作。我在Silverlight中創建了該項目,並讓它運行,然後將這些文件複製到WPF應用程序中。
經過小小的調整後,我得到了它的工作方式,基本上是一樣的方式,但與Silverlight版本相比,動畫看起來很糟糕。
1)在silverlight中,無論表格大小如何,一切都能平穩地移動。在WPF動畫中,當有很多動畫正在進行時,動畫會變得不穩定,而且包含窗口越大,動畫的表現也越差。
2)在Silverlight中,正在拖動的吊艙以及需要順利進行動畫製作的其他吊艙。在wpf中,拖動鼠標時移動的窗格不會移動,但當您拖動鼠標時,其他窗格仍然不起作用。然後,當您放開鼠標時,吊艙會快速移動到您將鼠標重新放置在的位置。另外,其他豆莢的動畫開始看起來很糟糕(比如圖形驅動程序不堪重負)並不需要很長時間。
爲什麼行爲對於wpf和silverlight之間的相同xaml和代碼如此根本不同,以及如何讓WPF以與原始Silverlight代碼相同的美麗方式進行動畫製作?
下面是我爲了讓WPF版本正常工作所做的更改。
首先,我創造了一切,他們這樣做是對Silverlight的道路,它給了我一個錯誤,當我第一次開始吧:
{「‘System.Windows.Media.Animation.DoubleAnimation’不能使用默認原點'的NaN'「}的值
所以,我固定的通過更新
void TranslateAnimation(UIElement element, double newLeft, double newTop, double ts)
方法,其中在所述方法的開始follwoing代碼:
void TranslateAnimation(UIElement element, double newLeft, double newTop, double ts)
{
if (double.IsNaN(Canvas.GetLeft(element)))
{
element.SetValue(Canvas.LeftProperty, Convert.ToDouble(0));
}
if (double.IsNaN(Canvas.GetTop(element)))
{
element.SetValue(Canvas.TopProperty, Convert.ToDouble(0));
}
...
這使得代碼可以在不崩潰的情況下啓動/運行。
此方法創建Storyboard和Double動畫對象,將其與一個窗格掛鉤,然後告知故事板開始。它在一個循環中被調用,每個移動的莢目前都不會被鼠標拖動。
也注意到這一點。 – NestorArturo