ColorAnimation在DataTrigger内部结束后如何恢复到以前的颜色?

时间:2014-01-18 16:10:23

标签: wpf xaml animation storyboard datatrigger

<DataTemplate>
    <StackPanel Name="stack" Background="PaleTurquoise">
        <Grid>
            <Slider Name="sld" Value="{Binding TimeLeft}" />
        </Grid>
    </StackPanel>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding ElementName=sld, Path=Value}" Value="0">
            <DataTrigger.EnterActions>
                <BeginStoryboard Name="flash">
                    <Storyboard TargetName="stack" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)">
                        <ColorAnimation From="MediumSpringGreen" To="Crimson" Duration="0:0:0.1" AutoReverse="True" RepeatBehavior="0:0:5"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <RemoveStoryboard BeginStoryboardName="flash"/>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

这是我的闹钟应用程序中的xaml的缩减版本。当滑块的值达到0时,触发ColorAnimation,动画显示包含Slider的StackPanel的背景。

但是,当闪烁结束时,我希望背景颜色恢复到之前的值(PaleTurquoise)。我如何在xaml中完成此任务?

作为进一步的问题,即使我的ViewModel中的TimeLeft在初始化时为0,我怎样才能在首次加载应用程序时触发DataTrigger?

1 个答案:

答案 0 :(得分:0)

最后我为背景的默认颜色制作了一个StaticResource,并在第一个之后放了另一个ColorAnimation:

<ColorAnimation To="{StaticResource alarmBackgroundColour}" BeginTime="0:0:5"/>

要回答触发器在启动时不启动的第二部分,我通过使ValueConverter仅为第一次调用返回1来攻击它。

欢迎任何更好的解决方案。