diff --git a/src/Avalonia.Base/Media/EllipseGeometry.cs b/src/Avalonia.Base/Media/EllipseGeometry.cs
index 8211855324..84d74e888e 100644
--- a/src/Avalonia.Base/Media/EllipseGeometry.cs
+++ b/src/Avalonia.Base/Media/EllipseGeometry.cs
@@ -56,6 +56,10 @@ namespace Avalonia.Media
///
/// Gets or sets a rect that defines the bounds of the ellipse.
///
+ ///
+ /// When set, this takes priority over the other properties that define an
+ /// ellipse using a center point and X/Y-axis radii.
+ ///
public Rect Rect
{
get => GetValue(RectProperty);
@@ -65,6 +69,10 @@ namespace Avalonia.Media
///
/// Gets or sets a double that defines the radius in the X-axis of the ellipse.
///
+ ///
+ /// In order for this property to be used, must not be set
+ /// (equal to the default value).
+ ///
public double RadiusX
{
get => GetValue(RadiusXProperty);
@@ -74,6 +82,10 @@ namespace Avalonia.Media
///
/// Gets or sets a double that defines the radius in the Y-axis of the ellipse.
///
+ ///
+ /// In order for this property to be used, must not be set
+ /// (equal to the default value).
+ ///
public double RadiusY
{
get => GetValue(RadiusYProperty);
@@ -83,6 +95,10 @@ namespace Avalonia.Media
///
/// Gets or sets a point that defines the center of the ellipse.
///
+ ///
+ /// In order for this property to be used, must not be set
+ /// (equal to the default value).
+ ///
public Point Center
{
get => GetValue(CenterProperty);
@@ -92,7 +108,30 @@ namespace Avalonia.Media
///
public override Geometry Clone()
{
- return new EllipseGeometry(Rect);
+ // Note that the ellipse properties are used in two modes:
+ //
+ // 1. Rect-only Mode:
+ // Directly set the rectangle bounds the ellipse will fill
+ //
+ // 2. Center + Radii Mode:
+ // Set a center-point and then X/Y-axis radii that are used to
+ // calculate the rectangle bounds the ellipse will fill.
+ // This is the only mode supported by WPF.
+ //
+ // Rendering the ellipse will only ever use one of these two modes
+ // based on if the Rect property is set (not equal to default).
+ //
+ // This means it would normally be fine to copy ONLY the Rect property
+ // when it is set. However, while it would render the same, it isn't
+ // a true clone. We want to include all the properties here regardless
+ // of the rendering mode that will eventually be used.
+ return new EllipseGeometry()
+ {
+ Rect = Rect,
+ RadiusX = RadiusX,
+ RadiusY = RadiusY,
+ Center = Center,
+ };
}
///