diff --git a/src/Avalonia.Base/Interactivity/RoutedEventArgs.cs b/src/Avalonia.Base/Interactivity/RoutedEventArgs.cs
index 60a6b64677..2b660e7080 100644
--- a/src/Avalonia.Base/Interactivity/RoutedEventArgs.cs
+++ b/src/Avalonia.Base/Interactivity/RoutedEventArgs.cs
@@ -3,7 +3,7 @@ using System;
namespace Avalonia.Interactivity
{
///
- /// Provices state information and data specific to a routed event.
+ /// Provides state information and data specific to a routed event.
///
public class RoutedEventArgs : EventArgs
{
diff --git a/src/Avalonia.Controls/SizeChangedEventArgs.cs b/src/Avalonia.Controls/SizeChangedEventArgs.cs
index 201a00a3fc..b3e399ff55 100644
--- a/src/Avalonia.Controls/SizeChangedEventArgs.cs
+++ b/src/Avalonia.Controls/SizeChangedEventArgs.cs
@@ -1,4 +1,6 @@
using Avalonia.Interactivity;
+using Avalonia.Layout;
+using Avalonia.Utilities;
namespace Avalonia.Controls
{
@@ -42,14 +44,23 @@ namespace Avalonia.Controls
{
PreviousSize = previousSize;
NewSize = newSize;
- HeightChanged = newSize.Height != previousSize.Height;
- WidthChanged = newSize.Width != previousSize.Width;
+
+ // Only consider changed when the size difference is greater than LayoutEpsilon
+ // This compensates for any rounding or precision difference between layout cycles
+ HeightChanged = !MathUtilities.AreClose(newSize.Height, previousSize.Height, LayoutHelper.LayoutEpsilon);
+ WidthChanged = !MathUtilities.AreClose(newSize.Width, previousSize.Width, LayoutHelper.LayoutEpsilon);
}
///
- /// Gets a value indicating whether the height of the new size is different
- /// than the previous size height.
+ /// Gets a value indicating whether the height of the new size is considered
+ /// different than the previous size height.
///
+ ///
+ /// This will take into account layout epsilon and will not be true if both
+ /// heights are considered equivalent for layout purposes. Remember there can
+ /// be small variations in the calculations between layout cycles due to
+ /// rounding and precision even when the size has not otherwise changed.
+ ///
public bool HeightChanged { get; init; }
///
@@ -63,9 +74,15 @@ namespace Avalonia.Controls
public Size PreviousSize { get; init; }
///
- /// Gets a value indicating whether the width of the new size is different
- /// than the previous size width.
+ /// Gets a value indicating whether the width of the new size is considered
+ /// different than the previous size width.
///
+ ///
+ /// This will take into account layout epsilon and will not be true if both
+ /// heights are considered equivalent for layout purposes. Remember there can
+ /// be small variations in the calculations between layout cycles due to
+ /// rounding and precision even when the size has not otherwise changed.
+ ///
public bool WidthChanged { get; init; }
}
}