2010-03-08 5 views
0

Disons que j'ai un contrôle comme celui-ci:propriétés Animer du contenu d'un modèle dans Silverlight

<Button Style="{StaticResource MyButton}"> 
    <Polygon Style="{StaticResource MyButtonIcon}" 
       Points="... some points ..." /> 
</Button> 

MyButton est le style de l'arrière-plan du bouton tout en MyButtonIcon est le style de la bouton icône polygone lui-même. Je voudrais animer subtilement le bouton lorsque l'utilisateur passe la souris sur le bouton. Je peux gérer pour animer l'arrière-plan (défini dans MyButton) la manière habituelle dans le modèle (VisualStateManager/VisualState/MouseOver/Storyboard/ColorAnimation). Pour avoir une idée, ma déclaration de ColorAnimation ressemble à quelque chose aime ça:

<ColorAnimation Storyboard.TargetName="BackgroundTop" 
       Storyboard.TargetProperty="Color" 
       To="#FFFFFF" 
       Duration="0:0:0.200" /> 

Cela fonctionne bien pour l'arrière-plan. Cependant, j'aimerais aussi animer les couleurs des paliers de dégradé du polygone de contenu. Je ne peux pas mettre l'animation en MyButtonIcon parce que je veux que le polygone à animer lorsque la souris survole le bouton partout, et pas seulement le polygone dans le bouton. Je suppose que ce sera ressembler à quelque chose comme ceci:

<ColorAnimation Storyboard.TargetName="MyContentPresenter" 
       Storyboard.TargetProperty="Some.Really.Long.Path.Color" 
       To="#FFFFFF" 
       Duration="0:0:0.200" /> 

La question est: quelle devrait être la valeur de « Some.Really.Long.Path.Color »? C'est, disons par exemple, si je veux accéder à la propriété de couleur du premier arrêt de gradient du « remplissage » du polygone à l'intérieur du présentateur de contenu, comment pourrais-je aller en faisant cela? Ou est-ce que j'essaie de le faire d'une manière complètement incorrecte?

J'espère avoir été clair et fourni suffisamment de détails, laissez-moi savoir si vous avez besoin de savoir plus.

Répondre

0

Essayez ceci pour Storyboard.TargetProperty dans votre ColorAnimation:

Storyboard.TargetProperty = 
"(MyContentPresenter.MyButtonIcon.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" 

Je ne sais pas si la partie (MyContentPresenter.MyButtonIcon.Fill) est juste, mais le reste devrait être. Si cela ne fonctionne pas, jouer avec (MyContentPresenter.MyButtonIcon.Fill) jusqu'à ce qu'il pointe vers votre GradientBrush, et le reste devrait se mettre en place.

Et je suppose que cela va sans dire, mais je vais le dire juste au cas où: (GradientBrush.GradientStops)[0] se réfère à la première GradientStop au sein de votre GradientBrush; il suffit de changer l'index pour faire référence à un autre.

Espérons que cela aide!

Questions connexes