Mega Code Archive

 
Categories / C# / WPF
 

Stop, resume animation with Storyboard

<Window     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     x:Class="WpfApplication1.Window1"     Title="Color Spinner" Height="370" Width="270" >     <Window.Resources>         <Storyboard x:Key="Spin">             <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" RepeatBehavior="Forever">                 <SplineDoubleKeyFrame KeyTime="00:00:10" Value="360"/>             </DoubleAnimationUsingKeyFrames>         </Storyboard>     </Window.Resources>     <Window.Triggers>         <EventTrigger RoutedEvent="FrameworkElement.Loaded">             <BeginStoryboard Storyboard="{StaticResource Spin}" x:Name="Spin_BeginStoryboard"/>         </EventTrigger>         <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="goButton">             <ResumeStoryboard BeginStoryboardName="Spin_BeginStoryboard"/>         </EventTrigger>         <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="stopButton">             <PauseStoryboard BeginStoryboardName="Spin_BeginStoryboard"/>         </EventTrigger>     </Window.Triggers>     <Window.Background>         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">             <GradientStop Color="#FFFFFFFF" Offset="0"/>             <GradientStop Color="#FFFFC45A" Offset="1"/>         </LinearGradientBrush>     </Window.Background>     <Grid>         <StackPanel>             <Ellipse Margin="15,85,0,0" Name="ellipse1" Stroke="{x:Null}" Height="80" HorizontalAlignment="Left" VerticalAlignment="Top" Width="120" Fill="Red" Opacity="0.5" RenderTransformOrigin="0.92,0.5" >                 <Ellipse.BitmapEffect>                     <BevelBitmapEffect/>                 </Ellipse.BitmapEffect>                 <Ellipse.RenderTransform>                     <TransformGroup>                         <RotateTransform Angle="0"/>                     </TransformGroup>                 </Ellipse.RenderTransform>             </Ellipse>             <Button Name="goButton" Content="Go"/>         <Button Name="stopButton" Content="Stop"/>         <Button Name="toggleButton" Content="Toggle" Click="toggleButton_Click" />        </StackPanel>     </Grid> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Media.Animation; namespace WpfApplication1 {     public partial class Window1 : Window     {         public Window1()         {             InitializeComponent();         }         private void toggleButton_Click(object sender, RoutedEventArgs e)         {             Storyboard spinStoryboard = Resources["Spin"] as Storyboard;             if (spinStoryboard != null)             {                 if (spinStoryboard.GetIsPaused(this))                 {                     spinStoryboard.Resume(this);                 }                 else                 {                     spinStoryboard.Pause(this);                 }             }         }     } }