.NET - ColorAnimation не работает
Я создал 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 ответа
Когда используешь Storyboard.SetTargetName
имя должно быть значением фактического свойства Name экземпляра FrameworkElement, в котором вы хотите анимировать свойство. Так что в вашем случае, вероятно, экземпляр SpotLightAuditorium
управления:
Storyboard.SetTargetName(mouseEnterColorAnimation, mySpotlightAuditorium.Name);
Путь к собственности должен быть ссылкой на фактическое свойство зависимости:
Storyboard.SetTargetProperty(mouseEnterColorAnimation, new PropertyPath(SpotLightAuditorium.ColorProperty));
Если вы хотите анимировать Brush напрямую (у которого нет свойства 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);
Вы не зарегистрировали имя кисти на странице, чтобы ее можно было использовать для раскадровок:
SolidColorBrush myAnimatedBrush = new SolidColorBrush();
myAnimatedBrush.Color = ?? choose a color
this.RegisterName("MyAnimatedBrush", myAnimatedBrush);