diff --git a/src/Avalonia.Visuals/Animation/Animators/RelativePointAnimator.cs b/src/Avalonia.Visuals/Animation/Animators/RelativePointAnimator.cs
new file mode 100644
index 0000000000..40fa4503f0
--- /dev/null
+++ b/src/Avalonia.Visuals/Animation/Animators/RelativePointAnimator.cs
@@ -0,0 +1,20 @@
+namespace Avalonia.Animation.Animators
+{
+ ///
+ /// Animator that handles properties.
+ ///
+ public class RelativePointAnimator : Animator
+ {
+ private static readonly PointAnimator s_pointAnimator = new PointAnimator();
+
+ public override RelativePoint Interpolate(double progress, RelativePoint oldValue, RelativePoint newValue)
+ {
+ if (oldValue.Unit != newValue.Unit)
+ {
+ return progress >= 1 ? newValue : oldValue;
+ }
+
+ return new RelativePoint(s_pointAnimator.Interpolate(progress, oldValue.Point, newValue.Point), oldValue.Unit);
+ }
+ }
+}
diff --git a/src/Avalonia.Visuals/Animation/Transitions/RelativePointTransition.cs b/src/Avalonia.Visuals/Animation/Transitions/RelativePointTransition.cs
new file mode 100644
index 0000000000..4a7bfa8384
--- /dev/null
+++ b/src/Avalonia.Visuals/Animation/Transitions/RelativePointTransition.cs
@@ -0,0 +1,11 @@
+using Avalonia.Animation.Animators;
+
+namespace Avalonia.Animation
+{
+ ///
+ /// Transition class that handles with type.
+ ///
+ public class RelativePointTransition : AnimatorDrivenTransition
+ {
+ }
+}
diff --git a/src/Avalonia.Visuals/RelativePoint.cs b/src/Avalonia.Visuals/RelativePoint.cs
index 097ea69be4..497820ec65 100644
--- a/src/Avalonia.Visuals/RelativePoint.cs
+++ b/src/Avalonia.Visuals/RelativePoint.cs
@@ -1,5 +1,7 @@
using System;
using System.Globalization;
+
+using Avalonia.Animation.Animators;
using Avalonia.Utilities;
namespace Avalonia
@@ -45,6 +47,11 @@ namespace Avalonia
private readonly RelativeUnit _unit;
+ static RelativePoint()
+ {
+ Animation.Animation.RegisterAnimator(prop => typeof(RelativePoint).IsAssignableFrom(prop.PropertyType));
+ }
+
///
/// Initializes a new instance of the struct.
///