|
|
|
@ -1024,6 +1024,56 @@ namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
Assert.Equal(new[] { 15 }, SelectedContainers(target)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Can_Change_Selection_For_Containers_Outside_Of_Viewport() |
|
|
|
{ |
|
|
|
// Issue #11119
|
|
|
|
using var app = Start(); |
|
|
|
var items = Enumerable.Range(0, 100).Select(x => new TestContainer |
|
|
|
{ |
|
|
|
Content = $"Item {x}", |
|
|
|
Height = 100, |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
// Create a SelectingItemsControl with a virtualizing stack panel.
|
|
|
|
var target = CreateTarget(itemsSource: items, virtualizing: true); |
|
|
|
target.AutoScrollToSelectedItem = false; |
|
|
|
|
|
|
|
var panel = Assert.IsType<VirtualizingStackPanel>(target.ItemsPanelRoot); |
|
|
|
var scroll = panel.FindAncestorOfType<ScrollViewer>()!; |
|
|
|
|
|
|
|
// Select item 1.
|
|
|
|
target.SelectedIndex = 1; |
|
|
|
|
|
|
|
// Scroll item 1 and 2 out of view.
|
|
|
|
scroll.Offset = new(0, 1000); |
|
|
|
Layout(target); |
|
|
|
|
|
|
|
Assert.Equal(10, panel.FirstRealizedIndex); |
|
|
|
Assert.Equal(19, panel.LastRealizedIndex); |
|
|
|
|
|
|
|
// Select item 2 now that items 1 and 2 are both unrealized.
|
|
|
|
target.SelectedIndex = 2; |
|
|
|
|
|
|
|
// The selection should be updated.
|
|
|
|
Assert.Empty(SelectedContainers(target)); |
|
|
|
Assert.Equal(2, target.SelectedIndex); |
|
|
|
Assert.Same(items[2], target.SelectedItem); |
|
|
|
Assert.Equal(new[] { 2 }, target.Selection.SelectedIndexes); |
|
|
|
Assert.Equal(new[] { items[2] }, target.Selection.SelectedItems); |
|
|
|
|
|
|
|
// Scroll selected item back into view.
|
|
|
|
scroll.Offset = new(0, 0); |
|
|
|
Layout(target); |
|
|
|
|
|
|
|
// The selection should be preserved.
|
|
|
|
Assert.Equal(new[] { 2 }, SelectedContainers(target)); |
|
|
|
Assert.Equal(2, target.SelectedIndex); |
|
|
|
Assert.Same(items[2], target.SelectedItem); |
|
|
|
Assert.Equal(new[] { 2 }, target.Selection.SelectedIndexes); |
|
|
|
Assert.Equal(new[] { items[2] }, target.Selection.SelectedItems); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Selection_State_Change_On_Unrealized_Item_Is_Respected_With_IsSelected_Binding() |
|
|
|
{ |
|
|
|
@ -1197,7 +1247,7 @@ namespace Avalonia.Controls.UnitTests.Primitives |
|
|
|
{ |
|
|
|
Setters = |
|
|
|
{ |
|
|
|
new Setter(TreeView.TemplateProperty, CreateTestContainerTemplate()), |
|
|
|
new Setter(TestContainer.TemplateProperty, CreateTestContainerTemplate()), |
|
|
|
}, |
|
|
|
}; |
|
|
|
} |
|
|
|
|