diff --git a/src/Avalonia.Base/AvaloniaObjectExtensions.cs b/src/Avalonia.Base/AvaloniaObjectExtensions.cs
index 0c22213d33..b3f41eb420 100644
--- a/src/Avalonia.Base/AvaloniaObjectExtensions.cs
+++ b/src/Avalonia.Base/AvaloniaObjectExtensions.cs
@@ -334,7 +334,7 @@ namespace Avalonia
/// .
///
/// The type of the property change sender.
- /// /// The type of the property..
+ /// The type of the property.
/// The property changed observable.
///
/// The method to call. The parameters are the sender and the event args.
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,
+ };
}
///
diff --git a/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs
index 3406432ce7..f418d4e14a 100644
--- a/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs
+++ b/src/Avalonia.Base/Media/TextFormatting/Unicode/BiDiAlgorithm.cs
@@ -687,7 +687,7 @@ namespace Avalonia.Media.TextFormatting.Unicode
///
/// This method resolves the sos and eos values for the run
/// and adds the run to the list
- /// ///
+ ///
/// The index of the start of the run (in x9 removed units)
/// The length of the run (in x9 removed units)
/// The level of the run
diff --git a/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs b/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs
index 6f62c3be1d..57fedb3d69 100644
--- a/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs
+++ b/src/Avalonia.Base/Platform/IPlatformRenderInterface.cs
@@ -18,7 +18,7 @@ namespace Avalonia.Platform
/// Creates an ellipse geometry implementation.
///
/// The bounds of the ellipse.
- /// An ellipse geometry..
+ /// An ellipse geometry.
IGeometryImpl CreateEllipseGeometry(Rect rect);
///
diff --git a/src/Avalonia.Base/Utilities/TypeUtilities.cs b/src/Avalonia.Base/Utilities/TypeUtilities.cs
index 3a82bf02e0..7dbb0872f5 100644
--- a/src/Avalonia.Base/Utilities/TypeUtilities.cs
+++ b/src/Avalonia.Base/Utilities/TypeUtilities.cs
@@ -306,7 +306,7 @@ namespace Avalonia.Utilities
/// if the value could not be converted.
///
/// The value to convert.
- /// The type to convert to..
+ /// The type to convert to.
/// The culture to use.
/// A value of .
[RequiresUnreferencedCode(TrimmingMessages.TypeConversionRequiresUnreferencedCodeMessage)]
diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs
index 0c9bb89caa..4029782772 100644
--- a/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs
+++ b/src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs
@@ -216,7 +216,7 @@ namespace Avalonia.Controls.Primitives.PopupPositioning
///
/// If the adjusted position also ends up being constrained, the resulting position of the
/// FlipX adjustment will be the one before the adjustment.
- /// ///
+ ///
FlipX = 4,
///