2013-02-19 122 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