diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 7fed712e07..f3ad4dbbd9 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -374,27 +374,31 @@ namespace Avalonia.Controls { var sizeToContent = SizeToContent; var clientSize = ClientSize; - Size constraint; + Size constraint = clientSize; - switch (sizeToContent) + if ((sizeToContent & SizeToContent.Width) != 0) { - case SizeToContent.Width: - constraint = new Size(double.PositiveInfinity, ClientSize.Height); - break; - case SizeToContent.Height: - constraint = new Size(ClientSize.Width, double.PositiveInfinity); - break; - case SizeToContent.WidthAndHeight: - constraint = Size.Infinity; - break; - case SizeToContent.Manual: - constraint = ClientSize; - break; - default: - throw new InvalidOperationException("Invalid value for SizeToContent."); + constraint = constraint.WithWidth(double.PositiveInfinity); } - return base.MeasureOverride(constraint); + if ((sizeToContent & SizeToContent.Height) != 0) + { + constraint = constraint.WithHeight(double.PositiveInfinity); + } + + var result = base.MeasureOverride(constraint); + + if ((sizeToContent & SizeToContent.Width) == 0) + { + result = result.WithWidth(clientSize.Width); + } + + if ((sizeToContent & SizeToContent.Height) == 0) + { + result = result.WithHeight(clientSize.Height); + } + + return result; } protected override void HandleClosed()