У меня есть ViewModel с свойством State и Datatemplate, в котором содержится простой прямоугольник с фоновой щеткой. Всякий раз, когда изменяется состояние ViewModel, я хочу вызвать анимацию, которая начинается с цвета, который в данный момент имеет кисть, и оживляет его до нового цвета, представляющего новое состояние. Я сделал это с datatriggers. И это почти работает. Единственная проблема, с которой я сталкиваюсь, заключается в том, что она не начинается с цвета, который имеет сейчас кисть, но с неодушевленным базовым цветом. Вероятно, это потому, что я удаляю анимацию в действии exit. Но если я этого не сделаю, я смогу только окунуться в один раз. Что мне не хватает?Переключение анимации на основе значения свойства
Еще один вопрос, который у меня есть: мне нужно это stateanimation во множестве разных наборов данных, которые он всегда связывает с тем же свойством («State»), и они всегда оживляют SolidColorbrush. Есть ли способ поделиться этими анимациями datatrigger через datatemplates с использованием ресурсов и/или стилей?
<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>