diff --git a/src/Avalonia.Controls/VirtualizingStackPanel.cs b/src/Avalonia.Controls/VirtualizingStackPanel.cs index 9b2e1ffe21..0e40011760 100644 --- a/src/Avalonia.Controls/VirtualizingStackPanel.cs +++ b/src/Avalonia.Controls/VirtualizingStackPanel.cs @@ -40,7 +40,7 @@ namespace Avalonia.Controls get { var bounds = Orientation == Orientation.Horizontal ? - Bounds.Width : Bounds.Height; + _availableSpace.Width : _availableSpace.Height; return Math.Max(0, _takenSpace - bounds); } } diff --git a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs index a024fb5ec5..8ed7f9d0bb 100644 --- a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs @@ -80,6 +80,30 @@ namespace Avalonia.Controls.UnitTests Assert.Equal(2, target.OverflowCount); } + [Fact] + public void Reports_Correct_Overflow_During_Arrange() + { + var target = (IVirtualizingPanel)new VirtualizingStackPanel(); + var controller = new Mock(); + var called = false; + + target.Children.Add(new Canvas { Width = 50, Height = 50 }); + target.Children.Add(new Canvas { Width = 50, Height = 52 }); + target.Measure(new Size(100, 100)); + + controller.Setup(x => x.UpdateControls()).Callback(() => + { + Assert.Equal(2, target.PixelOverflow); + Assert.Equal(0, target.OverflowCount); + called = true; + }); + + target.Controller = controller.Object; + target.Arrange(new Rect(target.DesiredSize)); + + Assert.True(called); + } + [Fact] public void Reports_PixelOverflow_After_Arrange() {