2010-11-26 66 views
0

值這個項目是在C#.NET下4.動畫控制的旋轉結合自定義對象

我有每隔一段時間變化值自定義對象。一個UI控件應該反映最新的狀態 - 所以我試圖使用綁定,但我不能把它連接起來。

我希望控件注意對象的值何時改變(綁定?),然後動畫(Storyboard?)到新值超過1/2秒左右。它是特定於方向的,所以如果舊值是340degrees,而新值是15度,那麼我不希望它圍繞「長途」旋轉,所以在某處需要一些邏輯。

理想的情況下,這個動畫的所有細節應該在UI(xaml)中 - 我的更新對象不想知道UI細節。 Blend4中的工具似乎並不適合這項工作,並且我在xaml中的黑客行爲無處不在,非常緩慢......

我應該有另一個對象來偵聽對源對象的更改,然後配置動畫每次?它應該全部在xaml中嗎? '真實'的代碼?

有沒有人知道採取正確的方法,在這裏?或者可以指向某人發佈了一些相似的東西?我已經堅持了兩天,現在!

回答

0

來回相對於動畫的責任後,怕設計師堆砌起來的代碼混合,實際上得到它的工作,我(臨時)到達了各種各樣的解決方案...

這就是所謂的MainWindow.xaml.cs在啓動時:

private void initialiseCustomAnimations() 
{ 

    compassRoseAnimation = new DoubleAnimation(); 
    compassRoseAnimation.Duration = new Duration(TimeSpan.FromSeconds(2)); 
    navigationData.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(navigationData_PropertyChanged); 

} 

,這是膽量(其中CompassWithNumbersControl是建立在混合畫布):

private void navigationData_PropertyChanged(object sender, EventArgs e) 
{ 
    compassRoseAnimation.From = navigationData.previousHeading; 
    compassRoseAnimation.To = navigationData.heading; 
    RotateTransform rotateTransform = new RotateTransform(); 
    CompassWithNumbersControl.RenderTransform = rotateTransform; 
    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, compassRoseAnimation); 
} 

我應該只對正確的事件進行這個動畫被解僱,但它的工作原理..