我有一个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>
我该如何解决这个问题?
答案 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的答案以获得优雅的解决方案