2009-11-25 9 views
0

C'est ce que jeanimation Storyboard basé sur la propriété de commande de modèle de contrôle

  1. A ControlTemplate pour un bouton dans mon window.resource, ayant une ellipse avec un outerglow (nom - TasksToggleButtonOuterGlowBitmapEffect) et un texte
  2. Un bouton qui utilise ce modèle

C'est ce que je dois

1. Un story-board qui fonctionne sur le outerglow de l'ellipse mentionné ci-dessus 2. Je déclencher ce story-board de mon dossier codebehind à tout moment

Quand j'ai essayé cela avec l'extrait suivant, le cadre me donne un temps d'exécution exception indiquant qu'il n'est pas en mesure de trouver le contrôle, TasksToggleButtonOuterGlowBitmapEffect

<Window.Resource> 
    <ControlTemplate x:Key="DefaultTasksToggleButtonTemplate" TargetType="ToggleButton"> 
     <Grid Margin="2"> 
      <Border BorderBrush="White" BorderThickness="2" CornerRadius="20"> 
       <Border.BitmapEffect> 
        <OuterGlowBitmapEffect x:Name="TasksToggleButtonOuterGlowBitmapEffect" GlowColor="LightGray" /> 
       </Border.BitmapEffect> 
      </Border> 
      <Ellipse Fill="Red" Width="20" Height="20" Margin="2" /> 
      <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
     </Grid> 
    </ControlTemplate> 


    <Storyboard x:Key="GlowStoryboard"> 
     <DoubleAnimation Storyboard.TargetName="TasksToggleButtonOuterGlowBitmapEffect" Storyboard.TargetProperty="GlowSize" From="5" To="10" /> 
    </Storyboard> 

</Window.Resources> 

Mise à jour - Je veux que ce soit dans la ressource afin que tout bouton peut utiliser

Répondre

0

En surface, cela me semble être un bon candidat pour utiliser Visual State Manager. Les animations sont un peu lourdes pour ce genre d'effet SI le déclencheur est quelque chose comme MouseOver, Pressed, etc. Si vous envisagez de réagir à Button State, regardez définitivement VSM. Le problème que vous rencontrez est que la cible à laquelle vous tentez d'accéder fait partie d'un modèle et n'est donc pas un élément réel. Il est logique que vous ne puissiez pas le faire de cette façon: imaginez que vous aviez 50 boutons appliquant tous le même modèle: comment l'animation pourrait-elle savoir quel TasksToggleButtonOuterGlowBitmapEffect vous vouliez vraiment dire?

Vous pourriez être en mesure de gérer cela dans un déclencheur (si c'est WPF), mais je pense que pour ce faire, l'animation devrait également être définie dans le modèle, et je ne sais pas si vous pouvez le faire cette.

Vous pouvez également naviguer dans l'arborescence de modèles lors de l'exécution du code et y configurer votre animation.

+0

Juste vu le lien posté de PanJanek: ce poste a la réponse. Je ne savais pas que vous pouviez passer un modèle à une animation, c'est cool! –