C# .NET-彩色动画不';行不通

C# .NET-彩色动画不';行不通,c#,.net,visual-studio,coloranimation,C#,.net,Visual Studio,Coloranimation,我为聚光灯对象创建了彩色动画,但它似乎不起作用。 我做错了什么 ColorAnimation mouseEnterColorAnimation = new ColorAnimation(); mouseEnterColorAnimation.To = Colors.Red; mouseEnterColorAnimation.Duration = TimeSpan.FromSeconds(5); Storyboard.SetTargetName(mouseEnterColorAnimation,

我为聚光灯对象创建了彩色动画,但它似乎不起作用。 我做错了什么

ColorAnimation mouseEnterColorAnimation = new ColorAnimation();
mouseEnterColorAnimation.To = Colors.Red;
mouseEnterColorAnimation.Duration = TimeSpan.FromSeconds(5);
Storyboard.SetTargetName(mouseEnterColorAnimation, "MyAnimatedBrush");

Storyboard.SetTargetProperty(mouseEnterColorAnimation, new PropertyPath(SpotLightAuditorium.Color));
Storyboard storyboard = new Storyboard();
storyboard.RepeatBehavior = RepeatBehavior.Forever;
storyboard.Children.Add(mouseEnterColorAnimation);
storyboard.Begin(this);

使用
故事板.SetTargetName
时,名称必须是要在其中设置属性动画的FrameworkElement实例的实际属性值。因此,在您的案例中,可能是
SpotLightAuditorium
控件的一个实例:

Storyboard.SetTargetName(mouseEnterColorAnimation, mySpotlightAuditorium.Name);
propertypath必须是对实际依赖项属性的引用:

Storyboard.SetTargetProperty(mouseEnterColorAnimation, new PropertyPath(SpotLightAuditorium.ColorProperty));
如果要直接为笔刷设置动画(它没有Name属性),则必须使用与使用XAML
x:Name
相同的方法在当前页面/UserControl/窗口中注册笔刷名称

或者,您可以对从中派生的元素使用以下方法:


您没有在页面中注册画笔的名称,以便故事板可以将其作为目标:

SolidColorBrush myAnimatedBrush = new SolidColorBrush();
myAnimatedBrush.Color = ?? choose a color

this.RegisterName("MyAnimatedBrush", myAnimatedBrush);

SpotlightAuditory是Spotlight的一个具体实例,它似乎没有名称属性。我也不明白你对SpotLightAuditorium.ColorProperty的意思。我假设你的SpotLightAuditorium会得到一个颜色依赖属性,你会用它来制作动画。如果Spotlight没有name属性,则必须使用我的回答中所述的RegisterName方法来设置名称。如何设置颜色相关性属性?我也不明白为什么我需要画笔而不是常规颜色(因为聚光灯(3D灯光))只有颜色属性。很抱歉问这么多。啊-我们在谈论System.Windows.Media.Media3D.SpotLight。此类具有颜色依赖属性。你可以用它来制作动画(没有画笔-
“MyAnimatedBrush”
让我觉得你可能在某个地方有画笔。所以你可以调用RegsiterName作为聚光灯,然后调用
故事板.SetTargetName(mouseEnterColorAnimation,myspotlightAuditory.Name)
然后调用
故事板.SetTargetProperty(mouseEnterColorAnimation,新属性路径(SpotLight.ColorProperty));
YAY!它终于起作用了。为什么SetTarget而不是SetTargetName不起作用?
SolidColorBrush myAnimatedBrush = new SolidColorBrush();
myAnimatedBrush.Color = ?? choose a color

this.RegisterName("MyAnimatedBrush", myAnimatedBrush);