J'ai un ViewModel avec une propriété State et un Datatemplate qui contient un simple rectangle avec un pinceau de fond. Chaque fois que l'état du ViewModel change, je veux déclencher une animation qui commence par la couleur que le pinceau a actuellement et l'anime à la nouvelle couleur représentant le nouvel état. Je l'ai fait avec des datatriggers. Et ça marche presque. Le seul problème que j'ai est qu'il ne commence pas avec la couleur que le pinceau a actuellement, mais avec la couleur de base unanime. C'est probablement parce que je supprime l'animation dans l'action de sortie. Mais si je ne fais pas cela, je ne peux animer qu'une seule fois. Qu'est-ce que je rate?Changer l'animation en fonction de la valeur de la propriété
Une autre question que j'ai est: J'ai besoin de cette stateanimation dans beaucoup de différents types de données, il se lie toujours à la même propriété ("State") et ils animent toujours un SolidColorbrush. Existe-t-il un moyen de partager ces animations de Datatrigger sur des datatemplates utilisant des ressources et/ou des styles?
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=State}" Value="Active">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="activeStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Green" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="activeStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Error">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="errorStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Red" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="errorStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Wait">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="waitStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Yellow" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="waitStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Inactive">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="inactiveStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Gray" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="inactiveStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
</DataTemplate.Triggers>