重复按下按钮时,ColorAnimation会粘在颜色上

时间:2013-07-10 09:56:51

标签: c# wpf xaml button coloranimation

我有一个button-style的自定义ColorAnimation

这样可以正常工作,但是当反复按下多次时,它会一直粘在目标颜色上。

<Style TargetType="Button" x:Key="mainButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                    <ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation 
                                    Duration="0:0:0.10" 
                                    Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)" 
                                    To="Red"
                                    AutoReverse="True"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

<强>更新

如果您无法删除Storyboard中的Trigger.ExitActions,那么您确实必须自己解决From问题,以便中间开始Storyboard

但是,指定硬编码的From 不是唯一的解决方案。您可以让动画在启动时将其自身重置为基础颜色。

这样做的好处是没有指定一个From,你可以用更少的东西来跟踪未来的更新。

<Storyboard AutoReverse="True">

  <!-- By not specifying a To or From we pretty much reset the property to un-animated state(Exactly what the hard-coded from does) -->
  <ColorAnimation Duration="0:0:0"
                  Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)" />

  <!-- This part is same as original time to kick into new Foreground as desired -->
  <ColorAnimation Duration="0:0:1.5"
                  Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"
                  To="Red" />
</Storyboard>

答案 1 :(得分:1)

您尚未在From上设置ColorAnimation属性。因此,当您在动画中间按下按钮时,故事板将当前Foreground颜色值作为其From,这是动画反转回的颜色。

现在,当您反复按下按钮时,From颜色越来越接近红色,给人的印象是颜色卡在红色上。


<强>更新

这个答案只指出了问题所在。请参阅Viv的答案以获得优雅的解决方案