diff --git a/src/Avalonia.Controls/Image.cs b/src/Avalonia.Controls/Image.cs index fa6f5787be..ff6cd482df 100644 --- a/src/Avalonia.Controls/Image.cs +++ b/src/Avalonia.Controls/Image.cs @@ -96,7 +96,7 @@ namespace Avalonia.Controls } } - return result.Constrain(availableSize); + return result; } /// diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs index f378f47e64..bd3441078d 100644 --- a/src/Avalonia.Controls/StackPanel.cs +++ b/src/Avalonia.Controls/StackPanel.cs @@ -229,9 +229,7 @@ namespace Avalonia.Controls stackDesiredSize = stackDesiredSize.WithHeight(stackDesiredSize.Height - (hasVisibleChild ? spacing : 0)); } - // TODO: In WPF `.Constrain(availableSize)` is not used. - //return stackDesiredSize; - return stackDesiredSize.Constrain(availableSize); + return stackDesiredSize; } /// diff --git a/src/Avalonia.Layout/Layoutable.cs b/src/Avalonia.Layout/Layoutable.cs index 662f48ec44..bd248d6d44 100644 --- a/src/Avalonia.Layout/Layoutable.cs +++ b/src/Avalonia.Layout/Layoutable.cs @@ -534,6 +534,9 @@ namespace Avalonia.Layout height = Math.Min(height, MaxHeight); height = Math.Max(height, MinHeight); + width = Math.Min(width, availableSize.Width); + height = Math.Min(height, availableSize.Height); + if (UseLayoutRounding) { var scale = GetLayoutScale(); diff --git a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs index 722ad1c8ee..db113f0569 100644 --- a/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/StackPanelTests.cs @@ -210,13 +210,13 @@ namespace Avalonia.Controls.UnitTests new[] { new Rect(0, 0, 50, 10), - new Rect(0, 10, 150, 10), + new Rect(0, 10, 100, 10), new Rect(25, 20, 50, 10), - new Rect(-25, 30, 150, 10), + new Rect(0, 30, 100, 10), new Rect(50, 40, 50, 10), - new Rect(-50, 50, 150, 10), + new Rect(0, 50, 100, 10), new Rect(0, 60, 100, 10), - new Rect(0, 70, 150, 10), + new Rect(0, 70, 100, 10), }, bounds); } @@ -283,13 +283,13 @@ namespace Avalonia.Controls.UnitTests new[] { new Rect(0, 0, 10, 50), - new Rect(10, 0, 10, 150), + new Rect(10, 0, 10, 100), new Rect(20, 25, 10, 50), - new Rect(30, -25, 10, 150), + new Rect(30, 0, 10, 100), new Rect(40, 50, 10, 50), - new Rect(50, -50, 10, 150), + new Rect(50, 0, 10, 100), new Rect(60, 0, 10, 100), - new Rect(70, 0, 10, 150), + new Rect(70, 0, 10, 100), }, bounds); }