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.vb
Imports System
Imports System.Windows
Imports System.Windows.Media.Animation
Imports System.Windows.Input
Namespace WpfApplication1
Public Partial Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub Storyboard_Changed(sender As Object, e As System.EventArgs)
Dim clockGroup As ClockGroup = TryCast(sender, ClockGroup)
Dim animationClock As AnimationClock = TryCast(clockGroup.Children(0), AnimationClock)
If animationClock.CurrentProgress.HasValue Then
Seeker.Value = animationClock.CurrentProgress.Value
End If
End Sub
Private Sub Seeker_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double))
Storyboard.Seek(Rectangle, TimeSpan.FromTicks(CLng(Storyboard.Children(0).Duration.TimeSpan.Ticks * Seeker.Value)), TimeSeekOrigin.BeginTime)
End Sub
End Class
End Namespace
Related examples in the same category