Вы не присвоили TargetName
Свойство Раскадровки для запуска анимации.
Что ж, в вашем xaml есть две проблемы, чтобы запустить анимацию.
1) Storyboard.TargetName = "MyAnimation", имя цели должно быть именем элемента управления.В вашем случае вы предоставили, но вы дали или присвоили его RotateTransform, который находится под элементом управления Image, но не для изображения.
<Image x:Name="ImageControl" Grid.Row="0" MaxHeight="50" Source="C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg"
RenderTransformOrigin=".5,.5" >
, а в DoubleAnimation укажите TargetName в качестве имени элемента управления Image
Storyboard.TargetName="ImageControl"
2) Другая проблема заключается в том, что вы не предоставили свойство Target, от которого зависит ваша двойная анимация.
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
Ваш код остановки не работал, поскольку, это не было начато.Добавление этого ниже xaml решит вашу проблему.
Изменение в скорости, потому что вы дали 600, в течение 6 секунд это должно быть 6000, а не 600.
Это изменение, которое я сделал,При событии Mouse Down я передал Stop StoryBoard.
<Image.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard x:Name="BeginImageRotateAni" >
<Storyboard x:Name="MyStoryboard">
<DoubleAnimation x:Name="Prope11"
Storyboard.TargetName="ImageControl"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
To="360"
Duration="0:0:6"
RepeatBehavior="Forever"
FillBehavior="Stop"
>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseDown">
<EventTrigger.Actions>
<StopStoryboard BeginStoryboardName="BeginImageRotateAni"/>
</EventTrigger.Actions>
</EventTrigger>
</Image.Triggers>
и подписался на MouseDownEvent в конструкторе
ImageControl.MouseDown += ImageControl_MouseDown;
и написал код ниже в событии.
bool IsAnimationstarted = true;
private void ImageControl_MouseDown(object sender, MouseButtonEventArgs e)
{
if (IsAnimationstarted)
{
MyStoryboard.Stop();
IsAnimationstarted = false;
}
else
{
TimeSpan ts = TimeSpan.FromMilliseconds(6000);
Prope11.Duration = ts;
MyStoryboard.Begin();
IsAnimationstarted = true;
}
}
}
Альтернативное решение: - путем создания анимации в ресурсе и последующего использования ее в коде позади.
<Window.Resources>
<Storyboard x:Name="MyStoryboard" x:Key="Animation1" >
<DoubleAnimation x:Name="Prope11"
Storyboard.TargetName="ImageControl"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
To="360"
Duration="0:0:6"
RepeatBehavior="Forever"
FillBehavior="Stop"
>
</DoubleAnimation>
</Storyboard>
</Window.Resources>
В коде позади: -
bool IsAnimationstarted = true;
private void ImageControl_MouseDown(object sender, MouseButtonEventArgs e)
{
Storyboard board = (Storyboard)this.FindResource("Animation1");
if (IsAnimationstarted)
{
IsAnimationstarted = false;
board.Begin();
}
else
{
IsAnimationstarted = true;
board.Pause();
}
}
Я не знаю, почему меняют скорость или не уверены в своих намерениях.То, что я сделал здесь, это когда пользователь нажимает на элемент управления изображением, он запускает анимацию и снова нажимает паузу, и это продолжается.