<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); } } }