2016-08-24 1 views
1

J'essaye de faire un contrôle de curseur dans WPF. J'ai donc une ellipse pour changer sa couleur en vert quand on la glisse. J'ai essayé ce code à l'aide Storyboard.TargetProperty=FillPourquoi ColorAnimation ne fonctionne-t-il pas avec TargetProperty = "Fill"?

<ColorAnimation Storyboard.TargetName="ball" Storyboard.TargetProperty="Fill.Color" From="Red" To="LightGreen" Duration="0:0:0.3"/> 

Mais cela n'a pas fonctionné. J'ai fait quelques recherches et j'ai réalisé que ça devait être Fill.Color. Normalement, Ellipse a une propriété Fill à remplir. Pourquoi a-t-il besoin de l'extension Color?

Répondre

1

Fill est un type de pinceau et non un type de couleur. Il y a des convertisseurs par défaut en place qui vous permettent d'utiliser les notations simplifiées telles que Fill="Red" dans votre XAML, mais tout ce qui signifie que vous mettez Fill à un SolidColorBrush avec une couleur de Red

A ColorAnimation selon son nom sera animer entre Colors non pinceaux, vous devez donc accéder à la propriété Color du Fill (dans votre cas, fill est un SolidColorBrush qui a une propriété Color).

À titre d'exemple supplémentaire, si vous deviez définir votre Fill un pinceau plus complexe, comme un LinearGradientBrush, vous pouvez manipuler encore le gradient dans une ColorAnimation mais la syntaxe devient beaucoup plus complexe:

<ColorAnimation Storyboard.TargetName="ball" 
       Storyboard.TargetProperty="Fill.(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" 
       From="Red" To="LightGreen" Duration="0:0:0.3"/> 
+0

Bonne explication. WPF est si complexe et j'ai besoin de plus de pratique. Merci d'avoir répondu. –