<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>
![]()
![]()
![]()