WPF Storyboary DoubleAnimationUsingPath PathGeometry
<Window x:Class="WpfApp30.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp30" mc:Ignorable="d" WindowState="Maximized" Title="MainWindow" Height="450" Width="800"> <Window.Resources> <PathGeometry x:Key="rg"> <PathFigure IsClosed="True" StartPoint="20,20"> <PolyLineSegment Points="1500,20 1500,800 20,800 20,800"/> </PathFigure> </PathGeometry> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <Canvas Grid.Row="1"> <Ellipse Fill="Red" Stroke="Black" StrokeThickness="2" Width="40" Height="40" x:Name="e1" Canvas.Left="20" Canvas.Top="20"/> </Canvas> <Button Grid.Row="0" Content="Start Animation" FontSize="30" Margin="8"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard RepeatBehavior="Forever"> <DoubleAnimationUsingPath Duration="0:0:10" Storyboard.TargetName="e1" Storyboard.TargetProperty="(Canvas.Left)" PathGeometry="{StaticResource rg}" Source="X"/> <DoubleAnimationUsingPath Duration="0:0:10" Storyboard.TargetName="e1" Storyboard.TargetProperty="(Canvas.Top)" PathGeometry="{StaticResource rg}" Source="Y"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> </Button> </Grid> </Window>