Запуск Анимации
-
20-08-2019 - |
Вопрос
У меня есть пользовательский элемент управления, который, когда я дважды щелкаю по нему, я хочу, чтобы он увеличивал масштаб, если это еще не сделано.Если это так, то двойной щелчок уменьшит его масштаб.Я могу заставить его работать с исходным кодом, но я не могу заставить его работать в xaml.Вот код, стоящий за этим дескриптором события двойного щелчка.
void MyObjectMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (IsZoomedIn)
{
IsZoomedIn = false;
//ZoomOutAnimation();
}
else
{
IsZoomedIn = true;
//ZoomInAnimation();
}
}
затем в моем xaml:
<UserControl.RenderTransform>
<TransformGroup>
<RotateTransform />
<ScaleTransform />
<TranslateTransform />
</TransformGroup>
</UserControl.RenderTransform>
<UserControl.Style>
<Style>
<Style.Triggers>
<Trigger Property="local:MyObject.IsZoomedIn" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleX)" To="1" Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleY)" To="1" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="local:MyObject.IsZoomedIn" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleX)" To="2" Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.
RenderTransform).(TransformGroup.Children)[1].
(ScaleTransform.ScaleY)" To="2" Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
Как только он увеличивает масштаб моего пользовательского элемента управления, анимация уменьшения масштаба не работает.Любая помощь приветствуется.
Спасибо.
Решение
Ваши анимации содержат значения, и поэтому вторая анимация не появляется, даже несмотря на срабатывание триггера.Вместо двух отдельных триггеров вы можете использовать триггер.Завершите действия так же, как вы используете EnterActions .
<Trigger Property="IsZoomedIn"
Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard >
<DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
To="2"
Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
To="2"
Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"
To="1"
Duration="0:0:.3" />
<DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)"
To="1"
Duration="0:0:.3" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>