私はStateプロパティを持つViewModelと、背景ブラシを持つ単純な矩形を含むDatatemplateを持っています。 ViewModelの状態が変わるたびに、ブラシが現在持っている色で始まるアニメーションをトリガーし、新しい状態を表す新しい色にアニメートします。私はdatatriggersでこれを行っています。そして、それはほとんど動作します。私が持っている唯一の問題は、ブラシが現在持っている色から始めるのではなく、元に戻っていない基本色で始まるということです。これは、exitアクションでアニメーションを削除したためです。しかし、私がそれをしなければ、私は一度だけアニメーション化することができます。私は何が欠けていますか?プロパティ値に基づいてアニメーションを切り替えます
私が持っているもう1つの質問は、常に同じプロパティ(「状態」)にバインドする多くの異なるデータテンプレートでこの状態アニメーションが必要であり、常にSolidColorbrushをアニメーション化します。リソースやスタイルを使用してデータテンプレート間でこれらのデータトリガーアニメーションを共有できる方法はありますか?
<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>