ColorAnimation 不触发

ColorAnimation does not trigger

我尝试为模板的 LinearGradientBrush 制作动画。如果执行了单击,我想更改 canvas 背景的颜色。 "Pressed" 事件被触发,但没有任何反应。

        <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
        <Grid>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal"/>
                    <VisualState x:Name="MouseOver" />
                    <VisualState x:Name="Pressed">
                        <Storyboard AutoReverse="True" Duration="0:0:0.5">
                            <ColorAnimation Storyboard.TargetName="Form" Storyboard.TargetProperty="(Canvas.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" To="Red" Duration="0:0:0.5" />
                            <ColorAnimation Storyboard.TargetName="Form" Storyboard.TargetProperty="(Canvas.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" From="Black" To="Red" Duration="0:0:0.5" />
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Disabled" />
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>

            <Canvas Name="Form" Height="35">
                <Canvas.Background>
                    <LinearGradientBrush EndPoint="0.5,0.5" StartPoint="0.5,0">
                        <GradientStop Color="#FF007FEA" Offset="0"/>
                        <GradientStop Color="#FF004580" Offset="1"/>
                    </LinearGradientBrush>
                </Canvas.Background>
            </Canvas>

            <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </Grid>
    </ControlTemplate>

我看到上面有一个 x:Key。如果这只是您的 Button 样式模板中的一个片段,那么只需删除 x:Key,但是如果此 ControlTemplate 被用作资源,那么您只是点击了错误的 TargetProperty,因为我很确定 Canvas 是 Panel.,您可以只替换 Storyboard.TargetProperty 并在动画中丢失 From 属性,如工作 ColorAnimation 中所示下面。

<ColorAnimation Duration="0" To="Red" 
                Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)" 
                Storyboard.TargetName="Form"/>
<ColorAnimation Duration="0" To="Black" 
                Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" 
                Storyboard.TargetName="Form"/>