diff --git a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs index aa03a77d70..cb98552704 100644 --- a/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs +++ b/tests/Avalonia.Controls.UnitTests/VirtualizingStackPanelTests.cs @@ -646,7 +646,7 @@ namespace Avalonia.Controls.UnitTests { // Issue #11272 using var app = App(); - var (_, _, itemsControl) = CreateUnrootedTarget(); + var (_, _, itemsControl) = CreateUnrootedTarget(); var container = new Decorator { Margin = new Thickness(100) }; var root = new TestRoot(true, container); @@ -657,6 +657,44 @@ namespace Avalonia.Controls.UnitTests root.LayoutManager.ExecuteLayoutPass(); } + [Fact] + public void Supports_Null_Recycle_Key_When_Scrolling() + { + using var app = App(); + var (_, scroll, itemsControl) = CreateUnrootedTarget(); + var root = CreateRoot(itemsControl); + + root.LayoutManager.ExecuteInitialLayoutPass(); + + var firstItem = itemsControl.ContainerFromIndex(0)!; + scroll.Offset = new(0, 20); + + Layout(itemsControl); + + Assert.Null(firstItem.Parent); + Assert.Null(firstItem.VisualParent); + Assert.DoesNotContain(firstItem, itemsControl.ItemsPanelRoot!.Children); + } + + [Fact] + public void Supports_Null_Recycle_Key_When_Clearing_Items() + { + using var app = App(); + var (_, _, itemsControl) = CreateUnrootedTarget(); + var root = CreateRoot(itemsControl); + + root.LayoutManager.ExecuteInitialLayoutPass(); + + var firstItem = itemsControl.ContainerFromIndex(0)!; + itemsControl.ItemsSource = null; + + Layout(itemsControl); + + Assert.Null(firstItem.Parent); + Assert.Null(firstItem.VisualParent); + Assert.Empty(itemsControl.ItemsPanelRoot!.Children); + } + private static IReadOnlyList GetRealizedIndexes(VirtualizingStackPanel target, ItemsControl itemsControl) { return target.GetRealizedElements() @@ -704,7 +742,7 @@ namespace Avalonia.Controls.UnitTests Optional itemTemplate = default, IEnumerable