2010-09-22 7 views
0

J'ai créé ColorAnimation pour un objet SpotLight, mais cela ne semble pas fonctionner. Qu'est-ce que je fais de mal?.NET - ColorAnimation ne fonctionne pas

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

Répondre

1

Lorsque vous utilisez Storyboard.SetTargetName, le nom doit être la valeur de la propriété Name réelle de l'instance FrameworkElement où vous souhaitez animer une propriété. Donc, dans votre cas, probablement une instance de contrôle SpotLightAuditorium:

Storyboard.SetTargetName(mouseEnterColorAnimation, mySpotlightAuditorium.Name); 

Le PropertyPath doit être une référence à une propriété de dépendance réelle:

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

Si vous souhaitez animer un directement Brush (Wich n » t avoir une propriété Name) vous devez enregistrer le nom de la brosse dans la page courante/UserControl/Window en utilisant RegisterName Ceci est la même chose que l'utilisation de XAML x:Name.

ALternativlely vous pouvez utiliser l'approche suivante pour les éléments qui découlent de 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

SpotlightAuditorium est une instance concrète de Spotlight qui ne semble pas avoir un attribut Name. Aussi, je ne comprends pas ce que vous voulez dire avec SpotLightAuditorium.ColorProperty. – Hedge

+1

Je supposais que votre SpotLightAuditorium obtiendrait une propriété de dépendance de couleur, que vous utiliseriez ensuite pour l'animation. Si Spotlight n'a pas de propriété name, vous devrez utiliser la méthode RegisterName comme indiqué dans ma réponse pour définir le nom. – bitbonk

+0

Comment définir une propriété de dépendance de couleur? Je ne comprends pas non plus pourquoi j'ai besoin d'un pinceau au lieu d'une couleur normale (comme SpotLight (3D-Light)) a seulement un attribut de couleur. Désolé de demander autant. – Hedge

0

Vous n'avez pas enregistrer le nom de la brosse avec la page afin qu'il puisse être ciblé par storyboards:

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

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