.NET - ColorAnimation не работает - PullRequest
       17

.NET - ColorAnimation не работает

0 голосов
/ 22 сентября 2010

Я создал ColorAnimation для объекта SpotLight, но, похоже, он не работает. Что я делаю не так?

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);

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

При использовании Storyboard.SetTargetName имя должно быть значением фактического Name свойства экземпляра FrameworkElement, в котором вы хотите анимировать свойство.Так что в вашем случае, вероятно, экземпляр элемента управления SpotLightAuditorium:

Storyboard.SetTargetName(mouseEnterColorAnimation, mySpotlightAuditorium.Name);

Путь к свойству должен быть ссылкой на фактическое свойство зависимости:

Storyboard.SetTargetProperty(mouseEnterColorAnimation, new PropertyPath(SpotLightAuditorium.ColorProperty));

Если вы хотите анимироватьНепосредственно для кисти (у которой нет свойства Name) необходимо зарегистрировать имя кисти в текущей странице / UserControl / Window, используя RegisterName Это так же, как при использовании XAML x:Name.

ALternativlely вы можете использовать следующий подход для элементов, которые являются производными от Animatable :

ColorAnimation mouseEnterColorAnimation = new ColorAnimation();
mouseEnterColorAnimation.To = Colors.Red;
mouseEnterColorAnimation.Duration = TimeSpan.FromSeconds(5);
myAnimatedBrush.BeginAnimation(SolidColorBrush.ColorProperty, null); // remove the old animation to prevent memoryleak
myAnimatedBrush.BeginAnimation(SolidColorBrush.ColorProperty, mouseEnterColorAnimation);
0 голосов
/ 22 сентября 2010

Вы не зарегистрировали имя кисти на странице, чтобы на нее можно было ориентировать раскадровки:

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

this.RegisterName("MyAnimatedBrush", myAnimatedBrush);
...