Mega Code Archive

 
Categories / C# / WPF
 

Path Animation with DoubleAnimationUsingPath, AutoReverse

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