2011-03-08 2 views
6

J'ai une propriété booléenne appelée IsLoginWrong, je veux ensuite jouer une animation de storyboard si le IsLoginWrong est vrai. (IsLoginWrong fait un événement OnPropertyChanged, donc je sais que la liaison est correcte) Mais j'ai du mal avec la syntaxe. Cela pourrait ne pas être même raison, mais je pense que datatriggers ne peut vivre dans des styles ...WPF/Silverlight: Comment DataTrigger une animation Storyboard dans MVVM?

<UserControl.Style> 
    <Style> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=IsLoginWrong}" Value="True"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Storyboard="{StaticResource LoginWrong}"/> 
       </DataTrigger.EnterActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Style> 

Mais cela jette une exception « Un arbre storyboard dans un style ne peut pas spécifier un format » ... beause styles Caho se réfèrent à des articles spécifiquement .. génial. alors comment je fais ce que j'essaie de faire? (Animation de jeu si un changement booléennes dans MVVM)

Merci de

+0

En revenant sur ce 5 ans plus tard, mvvm était probablement la plus grande perte de temps dans ma carrière. préférable de le faire dans le code. – foreyez

Répondre

11

Dans un style que vous ne pouvez pas faire référence à un nom story-board. Donc, la façon dont je l'ai eu à travailler est de fourrer votre storyboard dans le style actuel:

<UserControl.Style>  
    <Style>   
     <Style.Triggers>    
      <DataTrigger Binding="{Binding Path=IsLoginWrong}" Value="True">      
       <DataTrigger.EnterActions>      
        <BeginStoryboard> 
         <Storyboard> 
          .... PUT YOUR ACTUAL STORY BOARD IN HERE ... 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions>    
      </DataTrigger>   
     </Style.Triggers>  
    </Style> 
</UserControl.Style> 

Maintenant DataTriggers peut soit être mis dans des styles ou des modèles de contrôle, donc il pourrait y avoir une plus belle façon de le faire avec des modèles de contrôle . mais c'est ce que j'ai trouvé pour l'instant.

2

Une option consiste à démarrer le storyboard à l'aide de VisualStateManager. L'article au http://blogs.infosupport.com/blogs/alexb/archive/2010/04/02/silverlight-4-using-the-visualstatemanager-for-state-animations-with-mvvm.aspx explique comment contrôler l'état actuel de VisualStateManager à partir du modèle de vue à l'aide d'une propriété jointe.

+0

Exactement ce que je cherchais merci.Shame il n'y a pas un moyen plus facile cependant. – BenBtg

Questions connexes