2013-02-19 37 views
3

我有一個c#類,我們稱之爲TwoButtonsHolder。在這堂課,我有2 UIElements我想用StoryBoards動畫。我們稱它們爲ButtonAButtonB。因爲我想讓它們同時具有動畫效果,所以我決定將所有動畫放在一個Storyboard對象中(或者有更好的方法嗎?)。所以現在我試圖在後面的代碼中創建故事板對象,但是我被卡在了必須定義目標屬性的部分。通常,當我宣佈動畫我用這樣的代碼來設置屬性如何將故事板用於多個目標對象?

Storyboard.SetTargetProperty(myDoubleAnimation, 
          new PropertyPath(UIElement.OpacityProperty)); 

現在我有型TwoButtonsHolder的目標對象中的UIElement。如何創建故事板並將動畫目標屬性設置爲TwoButtonsHolder.ButtonA.UIElement.OpacityProperty?使用單個故事板來動畫多個對象以使動畫同時運行的設計是否是這種糟糕的設計? (只是供參考,我想在代碼背後嘗試,不想進入XAML,因爲我覺得它太複雜,很難學習恕我直言)。謝謝

編輯:只是想補充的是,2個按鈕有不同的動畫,我把它們放在同一個故事板的唯一原因是他們開始在同一時間

回答

9

動畫,這是絕對沒有壞設計在一個Storyboard中爲多個對象製作動畫。

你會以某種方式把它寫這樣的:

var animationA = new DoubleAnimation(...); 
Storyboard.SetTarget(animationA, ButtonA); 
Storyboard.SetTargetProperty(animationA, new PropertyPath(UIElement.OpacityProperty)); 

var animationB = new DoubleAnimation(...); 
Storyboard.SetTarget(animationB, ButtonB); 
Storyboard.SetTargetProperty(animationB, new PropertyPath(UIElement.OpacityProperty)); 

var storyboard = new Storyboard(); 
storyboard.Children.Add(animationA); 
storyboard.Children.Add(animationB); 
storyboard.Begin(); 
+0

感謝克萊門斯,但我不知道如何從父對象設置'PropertyPath'。如果我將它設置爲'PropertyPath(TwoButtonsHolder.UIElement.OpacityProperty)',將會出現錯誤。你可以幫我用PropertyPath嗎? – 2013-02-19 16:56:26

+0

我只是再試一次,它一直顯示'「無法解析屬性路徑中的所有屬性引用'UIElement.OpacityProperty'。驗證適用對象是否支持屬性。'' – 2013-02-19 17:00:15

+0

該屬性應該按照我的答案中所示進行設置。它從[UIElement.OpacityProperty](http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacityproperty.aspx)字段初始化。沒有像TwoButtonsHolder.UIElement.OpacityProperty這樣的東西。 – Clemens 2013-02-19 17:02:13