如何将颜色动画重置为具有WPF触发器和动画的动画之前的颜色

时间:2013-08-12 08:06:27

标签: wpf triggers controltemplate

我有一个带有触发器部分的文本框的控件模板

<ControlTemplate.Triggers>
    <EventTrigger  RoutedEvent="Binding.TargetUpdated">
        <BeginStoryboard>
            <Storyboard>
                <ColorAnimationUsingKeyFrames 
                    Storyboard.TargetName="Border"
                    Storyboard.TargetProperty="Background.(SolidColorBrush.Color)">
                    <EasingColorKeyFrame KeyTime="0:0:0.20" Value="Yellow"/>
                    <EasingColorKeyFrame KeyTime="0:0:1" Value="{Binding ElementName=Border, Path=Background.SolidColorBrush.Color}"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ControlTemplate.Triggers>

这个想法是每当更新绑定目标时,文本框将呈黄色脉冲。我的UI在控件之间具有复杂的依赖关系,我希望当事情通过简单的视觉提示发生变化时通知用户。

我上面的问题是将文本框背景的颜色重置为之前的颜色。如果我将其设置为白色,则可能不是原始颜色。有几种视觉状态,即normal disabled enabled

所以我希望脉冲黄色,然后恢复以前的颜色。但是,如果我尝试绑定最终关键帧的颜色,我会收到类似

的错误
Cannot freeze storyboard to be used across multiple threads.

有没有办法在动画完成后自动清除动画的结果或动态绑定正确的颜色?

1 个答案:

答案 0 :(得分:3)

您可以将动画的FillBehavior设置为Stop。然后,动画属性将自动恢复为动画启动前的值。

<ColorAnimationUsingKeyFrames FillBehavior="Stop"
    Storyboard.TargetName="Border"
    Storyboard.TargetProperty="Background.Color">
    ...
</ColorAnimationUsingKeyFrames>