diff --git a/src/Avalonia.Controls/TopLevel.cs b/src/Avalonia.Controls/TopLevel.cs
index 8a1cdf3f80..881474c761 100644
--- a/src/Avalonia.Controls/TopLevel.cs
+++ b/src/Avalonia.Controls/TopLevel.cs
@@ -285,6 +285,11 @@ namespace Avalonia.Controls
///
public event EventHandler? Closed;
+ ///
+ /// Gets or sets a method called when the TopLevel's scaling changes.
+ ///
+ public event EventHandler? ScalingChanged;
+
///
/// Gets or sets the client size of the window.
///
@@ -428,7 +433,7 @@ namespace Avalonia.Controls
double ILayoutRoot.LayoutScaling => PlatformImpl?.RenderScaling ?? 1;
///
- double IRenderRoot.RenderScaling => PlatformImpl?.RenderScaling ?? 1;
+ public double RenderScaling => PlatformImpl?.RenderScaling ?? 1;
IStyleHost IStyleHost.StylingParent => _globalStyles!;
@@ -590,6 +595,7 @@ namespace Avalonia.Controls
protected virtual void HandleScalingChanged(double scaling)
{
LayoutHelper.InvalidateSelfAndChildrenMeasure(this);
+ ScalingChanged?.Invoke(this, EventArgs.Empty);
}
private static bool TransparencyLevelsMatch (WindowTransparencyLevel requested, WindowTransparencyLevel received)
diff --git a/src/Avalonia.Controls/WindowBase.cs b/src/Avalonia.Controls/WindowBase.cs
index c2523207e4..d640a0c2dc 100644
--- a/src/Avalonia.Controls/WindowBase.cs
+++ b/src/Avalonia.Controls/WindowBase.cs
@@ -116,6 +116,11 @@ namespace Avalonia.Controls
set { SetValue(TopmostProperty, value); }
}
+ ///
+ /// Gets the scaling factor for Window positioning and sizing.
+ ///
+ public double DesktopScaling => PlatformImpl?.DesktopScaling ?? 1;
+
///
/// Activates the window.
///