From 6fdce485fcefa8b21e29750b7dc6f1c057c30a80 Mon Sep 17 00:00:00 2001 From: Martin Florek Date: Mon, 10 Nov 2025 10:27:40 +0100 Subject: [PATCH 1/3] Add failing tests --- .../Presenters/ScrollContentPresenterTests.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs index 3a718bdd9a..97a2ee4b10 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs @@ -149,6 +149,42 @@ namespace Avalonia.Controls.UnitTests.Presenters Assert.Equal(new Size(100, double.PositiveInfinity), child.AvailableSize); } + [Fact] + public void Measure_Should_Honor_Horizontal_Padding_If_CannotScrollHorizontally() + { + var child = new TestControl(); + var target = new ScrollContentPresenter + { + CanHorizontallyScroll = false, + CanVerticallyScroll = true, + Padding = new Thickness(10, 0, 15, 0), + Content = child, + }; + + target.UpdateChild(); + target.Measure(new Size(100, 100)); + + Assert.Equal(new Size(75, double.PositiveInfinity), child.AvailableSize); + } + + [Fact] + public void Measure_Should_Honor_Vertical_Padding_If_CannotScrollVertically() + { + var child = new TestControl(); + var target = new ScrollContentPresenter + { + CanHorizontallyScroll = true, + CanVerticallyScroll = false, + Padding = new Thickness(0, 10, 0, 15), + Content = child, + }; + + target.UpdateChild(); + target.Measure(new Size(100, 100)); + + Assert.Equal(new Size(double.PositiveInfinity, 75), child.AvailableSize); + } + [Fact] public void Measure_Should_Pass_Unbounded_X_If_CanScrollHorizontally() { From 6a297798cf8cb3fbd3035e95a3ef88bff3a42246 Mon Sep 17 00:00:00 2001 From: Martin Florek Date: Mon, 10 Nov 2025 10:29:29 +0100 Subject: [PATCH 2/3] Use padding when when measuring children of ScrollContentPresenter --- src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs index 6527a14d5d..b734dce685 100644 --- a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs @@ -404,8 +404,8 @@ namespace Avalonia.Controls.Presenters } var constraint = new Size( - CanHorizontallyScroll ? double.PositiveInfinity : availableSize.Width, - CanVerticallyScroll ? double.PositiveInfinity : availableSize.Height); + CanHorizontallyScroll ? double.PositiveInfinity : availableSize.Width - Padding.Left - Padding.Right, + CanVerticallyScroll ? double.PositiveInfinity : availableSize.Height - Padding.Top - Padding.Bottom); Child.Measure(constraint); From 08f1abcabebc0458256e838f9a3c7553adccdbf3 Mon Sep 17 00:00:00 2001 From: Martin Florek Date: Mon, 10 Nov 2025 10:32:23 +0100 Subject: [PATCH 3/3] Fix failing test that didn't subtract padding when testing DesiredSize --- .../Presenters/ScrollContentPresenterTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs index 97a2ee4b10..518db7577d 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Presenters/ScrollContentPresenterTests.cs @@ -85,7 +85,7 @@ namespace Avalonia.Controls.UnitTests.Presenters target.Measure(new Size(100, 100)); target.Arrange(new Rect(0, 0, 100, 100)); - Assert.Equal(new Size(100, 100), target.DesiredSize); + Assert.Equal(new Size(80, 80), target.DesiredSize); } [Fact]