触发属性更改时,故事板动画未完成

时间:2012-08-14 19:23:40

标签: wpf animation storyboard

我正在使用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>

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

1 个答案:

答案 0 :(得分:0)

删除这一行:

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

然后订阅Storyboard.Completed事件。您可以使用EventSetter从XAML执行此操作。 在已完成事件处理程序中删除故事板。