1

我正在使用 WPF 和 MVVM。我有一个情节提要,其中包含在 ViewModel 中的某些状态上触发的彩色动画。如果处于“增加”状态,情节提要将导致项目闪烁绿色一次。如果处于“减少”状态,情节提要将闪烁一次红色。如果处于“未更改”状态,则不会发生任何事情。

我遇到的问题是,如果在动画运行时由于某种原因状态发生变化,动画将停止。例如,我进入了“增加”状态,动画开始闪烁绿色。然后相同的属性更改为 Unchanged 并且动画立即停止而没有结束。

即使触发的值发生了变化,有没有办法让动画运行它?

<Storyboard x:Key="ValueIncreasedStoryboard" AutoReverse="True">
    <ColorAnimation
        Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
        To="{StaticResource ResourceKey=IncreasedColor}"
        Duration="0:0:0.4" />
    <ColorAnimation
        Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
        To="{StaticResource ResourceKey=IncreasedColor}"
        Duration="0:0:1" />
</Storyboard>

<DataTrigger Binding="{Binding Path=Status}" Value="{x:Static ViewModel:Status.Increased}">
    <DataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource ValueIncreasedStoryboard}" x:Name="ValueIncreased_Storyboard"/>
    </DataTrigger.EnterActions>
    <DataTrigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="ValueIncreased_Storyboard"/>
    </DataTrigger.ExitActions>
</DataTrigger>

解决方案:删除退出操作和将填充行为设置为停止的组合。

4

1 回答 1

0

删除此行:

<DataTrigger.ExitActions>
    <RemoveStoryboard BeginStoryboardName="ValueIncreased_Storyboard"/>
</DataTrigger.ExitActions>

然后订阅 Storyboard.Completed 事件。您可以使用 EventSetter 从 XAML 执行此操作。在 Completed 事件处理程序中删除情节提要。

于 2012-08-14T20:54:00.750 回答