Mega Code Archive

 
Categories / C# / WPF
 

Control the Progress of an Animation

<Window x:Class="WpfApplication1.Window1"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   Title="" Height="300" Width="600">     <Grid>         <Rectangle x:Name="Rectangle" Height="100" Width="100" Fill="Firebrick">             <Rectangle.RenderTransform>                 <MatrixTransform x:Name="RectangleMatrixTransform" />             </Rectangle.RenderTransform>             <Rectangle.Triggers>                 <EventTrigger RoutedEvent="Rectangle.Loaded">                     <BeginStoryboard x:Name="RectangleStoryboard">                         <Storyboard x:Name="Storyboard" CurrentTimeInvalidated="Storyboard_Changed">                             <MatrixAnimationUsingPath Storyboard.TargetName="RectangleMatrixTransform" Storyboard.TargetProperty="Matrix" Duration="0:0:10"                 RepeatBehavior="Forever">                                 <MatrixAnimationUsingPath.PathGeometry>                                     <PathGeometry Figures="M -100,0 300, 0" />                                 </MatrixAnimationUsingPath.PathGeometry>                             </MatrixAnimationUsingPath>                         </Storyboard>                     </BeginStoryboard>                 </EventTrigger>             </Rectangle.Triggers>         </Rectangle>         <Slider x:Name="Seeker" Minimum="0" Maximum="1" SmallChange="0.001" ValueChanged="Seeker_ValueChanged">             <Slider.Triggers>                 <EventTrigger RoutedEvent="Slider.MouseLeftButtonDown">                     <StopStoryboard BeginStoryboardName="RectangleStoryboard" />                 </EventTrigger>                 <EventTrigger RoutedEvent="Slider.MouseLeftButtonUp">                     <ResumeStoryboard BeginStoryboardName="RectangleStoryboard" />                 </EventTrigger>             </Slider.Triggers>         </Slider>     </Grid> </Window> //File:Window.xaml.cs using System; using System.Windows; using System.Windows.Media.Animation; using System.Windows.Input; namespace WpfApplication1 {     public partial class Window1 : Window     {         public Window1()         {             InitializeComponent();         }         private void Storyboard_Changed(object sender, System.EventArgs e)         {             ClockGroup clockGroup = sender as ClockGroup;             AnimationClock animationClock = clockGroup.Children[0] as AnimationClock;             if (animationClock.CurrentProgress.HasValue)             {                 Seeker.Value = animationClock.CurrentProgress.Value;             }         }         private void Seeker_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)         {             Storyboard.Seek(Rectangle,                             TimeSpan.FromTicks((long)(Storyboard.Children[0].Duration.TimeSpan.Ticks * Seeker.Value)),                             TimeSeekOrigin.BeginTime);         }     } }