<Window x:Class="WpfApplication1.PathAnimationExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Path Animation" Height="500" Width="518">
<Canvas Margin="5">
<Polyline Points="0,345,96,345,320,432,500,432" Stroke="Gray"
StrokeThickness="5" />
<Path>
<Path.Data>
<PathGeometry x:Name="path2" Figures="M0,292 L75,292 300,380,449,380" />
</Path.Data>
</Path>
<Ellipse Name="circle2" Stroke="DarkGoldenrod" Canvas.Left="0"
Canvas.Top="293" Width="50" Height="50">
<Ellipse.Fill>
<LinearGradientBrush>
<GradientStop Color="DarkGoldenrod" Offset="0.5" />
<GradientStop Color="Gold" Offset="0.5" />
</LinearGradientBrush>
</Ellipse.Fill>
<Ellipse.RenderTransform>
<RotateTransform x:Name="circle2Rotate" CenterX="25" CenterY="25" />
</Ellipse.RenderTransform>
</Ellipse>
</Canvas>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace WpfApplication1
{
public partial class PathAnimationExample : Window
{
public PathAnimationExample()
{
InitializeComponent();
path2.Freeze(); // For performance benefits.
DoubleAnimationUsingPath daPath = new DoubleAnimationUsingPath();
daPath.Duration = TimeSpan.FromSeconds(5);
daPath.RepeatBehavior = RepeatBehavior.Forever;
daPath.AccelerationRatio = 0.6;
daPath.DecelerationRatio = 0.4;
daPath.AutoReverse = true;
daPath.PathGeometry = path2;
daPath.Source = PathAnimationSource.X;
circle2.BeginAnimation(Canvas.LeftProperty, daPath);
daPath = new DoubleAnimationUsingPath();
daPath.Duration = TimeSpan.FromSeconds(5);
daPath.RepeatBehavior = RepeatBehavior.Forever;
daPath.AccelerationRatio = 0.6;
daPath.DecelerationRatio = 0.4;
daPath.AutoReverse = true;
daPath.PathGeometry = path2;
daPath.Source = PathAnimationSource.Y;
circle2.BeginAnimation(Canvas.TopProperty, daPath);
}
}
}