Я создал шаблон управления для кнопки, содержащей сетку и элемент управления контентом. Я хочу сделать следующее: при нажатии кнопки масштаб кнопки должен оживить до 0,5 и когда кнопка покинет нажатое состояние, масштаб кнопки должен вернуться к 1.0.Animate ScaleTransform кнопки с помощью VisualStateManager
В моем текущем решении анимация для масштабирования = 0.5 работает хорошо, если кнопка нажата. Но как только я отпустить кнопку, анимация не масштабируется медленно назад в масштабе 1. Вместо ее незамедлительное в масштабе 1.
Моя реализация выглядит следующим образом:
<Style TargetType="Button" x:Name="MyButtonStyle">
<Setter Property="Margin" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid Background="{TemplateBinding Background}" x:Name="buttonLayoutRoot">
<Grid.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition To="Pressed" GeneratedDuration="0:0:2.5">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="buttonLayoutRoot"
Storyboard.TargetProperty="(Grid.RenderTransform).(ScaleTransform.ScaleX)"
To="0.5" Duration="0:0:2.5"/>
<DoubleAnimation
Storyboard.TargetName="buttonLayoutRoot"
Storyboard.TargetProperty="(Grid.RenderTransform).(ScaleTransform.ScaleY)"
To="0.5" Duration="0:0:2.5"/>
</Storyboard>
</VisualTransition>
<VisualTransition To="Normal" GeneratedDuration="0:0:2.5">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="buttonLayoutRoot"
Storyboard.TargetProperty="(Grid.RenderTransform).(ScaleTransform.ScaleX)"
To="1.0" Duration="0:0:2.5"/>
<DoubleAnimation
Storyboard.TargetName="buttonLayoutRoot"
Storyboard.TargetProperty="(Grid.RenderTransform).(ScaleTransform.ScaleY)"
To="1.0" Duration="0:0:2.5"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Pressed"/>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentControl
x:Name="ButtonContent"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}">
</ContentControl>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я также попытался поставить анимации в визуальные состояния «нормальные» и «нажатые» без каких-либо переходов. Но результат был тот же. Он просто привязывается к масштабу = 1, когда кнопка больше не нажата.
Я программирую для Windows Phone 8.0 silverlight.
Надеюсь, вы, ребята, можете мне помочь.
Спасибо, Кевин
Ваша проблема: вы не используете свой VSM правильно, ваши Stoyboards должны быть в VisualState, ваш VisualTransition - это то, что должно содержать ваши EasingFunctions в ваших состояниях «From» и «To». Если я получу свободное время, я вернусь к этому и покажу вам, как это сделать правильно. Это не большое дело. –