我尝试为模板的LinearGradientBrush设置动画。如果执行了单击,我想更改画布背景的颜色。"按下"事件被触发,但没有任何反应。
<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"/>