From 5c77a1de8c65430db6166a0eae174ee374ec9d3e Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 8 Apr 2025 10:27:55 +0200 Subject: [PATCH] Fix Window.Show when MinWidth > MaxWidth (#18604) * Add failing Window test * Fix Window.Show when MinWidth > MaxWidth * Fix AboutAvaloniaDialog size constraints --- src/Avalonia.Controls/Window.cs | 10 ++++++---- src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml | 2 +- .../WindowTests.cs | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index c771cb2af0..6fb203b035 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -734,9 +734,11 @@ namespace Avalonia.Controls double.IsNaN(Width) ? ClientSize.Width : Width, double.IsNaN(Height) ? ClientSize.Height : Height); + var minMax = new MinMax(this); + initialSize = new Size( - MathUtilities.Clamp(initialSize.Width, MinWidth, MaxWidth), - MathUtilities.Clamp(initialSize.Height, MinHeight, MaxHeight)); + MathUtilities.Clamp(initialSize.Width, minMax.MinWidth, minMax.MaxWidth), + MathUtilities.Clamp(initialSize.Height, minMax.MinHeight, minMax.MaxHeight)); var clientSizeChanged = initialSize != ClientSize; ClientSize = initialSize; // ClientSize is required for Measure and Arrange @@ -746,14 +748,14 @@ namespace Avalonia.Controls if (SizeToContent.HasFlag(SizeToContent.Width)) { - initialSize = initialSize.WithWidth(MathUtilities.Clamp(_arrangeBounds.Width, MinWidth, MaxWidth)); + initialSize = initialSize.WithWidth(MathUtilities.Clamp(_arrangeBounds.Width, minMax.MinWidth, minMax.MaxWidth)); clientSizeChanged |= initialSize != ClientSize; ClientSize = initialSize; } if (SizeToContent.HasFlag(SizeToContent.Height)) { - initialSize = initialSize.WithHeight(MathUtilities.Clamp(_arrangeBounds.Height, MinHeight, MaxHeight)); + initialSize = initialSize.WithHeight(MathUtilities.Clamp(_arrangeBounds.Height, minMax.MinHeight, minMax.MaxHeight)); clientSizeChanged |= initialSize != ClientSize; ClientSize = initialSize; } diff --git a/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml index b58df71ba2..e0bdf6d482 100644 --- a/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml +++ b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml @@ -1,7 +1,7 @@