diff --git a/src/Avalonia.Controls/VirtualizingStackPanel.cs b/src/Avalonia.Controls/VirtualizingStackPanel.cs index ddeb42e560..7ec1808e63 100644 --- a/src/Avalonia.Controls/VirtualizingStackPanel.cs +++ b/src/Avalonia.Controls/VirtualizingStackPanel.cs @@ -493,8 +493,7 @@ namespace Avalonia.Controls c = c?.GetVisualParent(); } - - return viewport; + return viewport.Intersect(new Rect(0, 0, double.PositiveInfinity, double.PositiveInfinity)); } private void RealizeElements( diff --git a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs index 61c21f46f4..951ca4e2c8 100644 --- a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs @@ -635,6 +635,22 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Does_Not_Throw_When_Estimating_Viewport_With_Ancestor_Margin() + { + // Issue #11272 + using var app = App(); + var (_, _, itemsControl) = CreateUnrootedTarget(); + var container = new Decorator { Margin = new Thickness(100) }; + var root = new TestRoot(true, container); + + root.LayoutManager.ExecuteInitialLayoutPass(); + + container.Child = itemsControl; + + root.LayoutManager.ExecuteLayoutPass(); + } + private static IReadOnlyList GetRealizedIndexes(VirtualizingStackPanel target, ItemsControl itemsControl) { return target.GetRealizedElements() @@ -681,6 +697,18 @@ namespace Avalonia.Controls.UnitTests IEnumerable? items = null, Optional itemTemplate = default, IEnumerable