|
|
@ -20,7 +20,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
{ |
|
|
{ |
|
|
var target = new ListBox |
|
|
var target = new ListBox |
|
|
{ |
|
|
{ |
|
|
Template = CreateListBoxTemplate(), |
|
|
Template = ListBoxTemplate(), |
|
|
Items = new[] { "Foo" }, |
|
|
Items = new[] { "Foo" }, |
|
|
ItemTemplate = new FuncDataTemplate<string>(_ => new Canvas()), |
|
|
ItemTemplate = new FuncDataTemplate<string>(_ => new Canvas()), |
|
|
}; |
|
|
}; |
|
|
@ -36,7 +36,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
{ |
|
|
{ |
|
|
var target = new ListBox |
|
|
var target = new ListBox |
|
|
{ |
|
|
{ |
|
|
Template = CreateListBoxTemplate(), |
|
|
Template = ListBoxTemplate(), |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
Prepare(target); |
|
|
Prepare(target); |
|
|
@ -52,7 +52,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
var items = new[] { "Foo", "Bar", "Baz " }; |
|
|
var items = new[] { "Foo", "Bar", "Baz " }; |
|
|
var target = new ListBox |
|
|
var target = new ListBox |
|
|
{ |
|
|
{ |
|
|
Template = CreateListBoxTemplate(), |
|
|
Template = ListBoxTemplate(), |
|
|
Items = items, |
|
|
Items = items, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
@ -76,7 +76,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
{ |
|
|
{ |
|
|
var target = new ListBox |
|
|
var target = new ListBox |
|
|
{ |
|
|
{ |
|
|
Template = CreateListBoxTemplate(), |
|
|
Template = ListBoxTemplate(), |
|
|
Items = new[] { "Foo", "Bar", "Baz " }, |
|
|
Items = new[] { "Foo", "Bar", "Baz " }, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
@ -106,7 +106,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
|
var target = new ListBox |
|
|
var target = new ListBox |
|
|
{ |
|
|
{ |
|
|
Template = CreateListBoxTemplate(), |
|
|
Template = ListBoxTemplate(), |
|
|
DataContext = "Base", |
|
|
DataContext = "Base", |
|
|
DataTemplates = new DataTemplates |
|
|
DataTemplates = new DataTemplates |
|
|
{ |
|
|
{ |
|
|
@ -128,13 +128,37 @@ namespace Avalonia.Controls.UnitTests |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private FuncControlTemplate CreateListBoxTemplate() |
|
|
[Fact] |
|
|
|
|
|
public void Selection_Should_Be_Cleared_On_Recycled_Items() |
|
|
|
|
|
{ |
|
|
|
|
|
var target = new ListBox |
|
|
|
|
|
{ |
|
|
|
|
|
Template = ListBoxTemplate(), |
|
|
|
|
|
Items = Enumerable.Range(0, 20).Select(x => $"Item {x}").ToList(), |
|
|
|
|
|
ItemTemplate = new FuncDataTemplate<string>(x => new TextBlock { Height = 10 }), |
|
|
|
|
|
SelectedIndex = 0, |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
Prepare(target); |
|
|
|
|
|
|
|
|
|
|
|
// Make sure we're virtualized and first item is selected.
|
|
|
|
|
|
Assert.Equal(10, target.Presenter.Panel.Children.Count); |
|
|
|
|
|
Assert.True(((ListBoxItem)target.Presenter.Panel.Children[0]).IsSelected); |
|
|
|
|
|
|
|
|
|
|
|
// Scroll down a page.
|
|
|
|
|
|
target.Scroll.Offset = new Vector(0, 10); |
|
|
|
|
|
|
|
|
|
|
|
// Make sure recycled item isn't now selected.
|
|
|
|
|
|
Assert.False(((ListBoxItem)target.Presenter.Panel.Children[0]).IsSelected); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private FuncControlTemplate ListBoxTemplate() |
|
|
{ |
|
|
{ |
|
|
return new FuncControlTemplate<ListBox>(parent => |
|
|
return new FuncControlTemplate<ListBox>(parent => |
|
|
new ScrollViewer |
|
|
new ScrollViewer |
|
|
{ |
|
|
{ |
|
|
Name = "PART_ScrollViewer", |
|
|
Name = "PART_ScrollViewer", |
|
|
Template = new FuncControlTemplate(CreateScrollViewerTemplate), |
|
|
Template = ScrollViewerTemplate(), |
|
|
Content = new ItemsPresenter |
|
|
Content = new ItemsPresenter |
|
|
{ |
|
|
{ |
|
|
Name = "PART_ItemsPresenter", |
|
|
Name = "PART_ItemsPresenter", |
|
|
@ -146,21 +170,26 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
|
private FuncControlTemplate ListBoxItemTemplate() |
|
|
private FuncControlTemplate ListBoxItemTemplate() |
|
|
{ |
|
|
{ |
|
|
return new FuncControlTemplate<ListBoxItem>(parent => new ContentPresenter |
|
|
return new FuncControlTemplate<ListBoxItem>(parent => |
|
|
{ |
|
|
new ContentPresenter |
|
|
Name = "PART_ContentPresenter", |
|
|
{ |
|
|
[!ContentPresenter.ContentProperty] = parent[!ListBoxItem.ContentProperty], |
|
|
Name = "PART_ContentPresenter", |
|
|
[!ContentPresenter.ContentTemplateProperty] = parent[!ListBoxItem.ContentTemplateProperty], |
|
|
[!ContentPresenter.ContentProperty] = parent[!ListBoxItem.ContentProperty], |
|
|
}); |
|
|
[!ContentPresenter.ContentTemplateProperty] = parent[!ListBoxItem.ContentTemplateProperty], |
|
|
|
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private Control CreateScrollViewerTemplate(ITemplatedControl parent) |
|
|
private FuncControlTemplate ScrollViewerTemplate() |
|
|
{ |
|
|
{ |
|
|
return new ScrollContentPresenter |
|
|
return new FuncControlTemplate<ScrollViewer>(parent => |
|
|
{ |
|
|
new ScrollContentPresenter |
|
|
Name = "PART_ContentPresenter", |
|
|
{ |
|
|
[~ContentPresenter.ContentProperty] = parent.GetObservable(ContentControl.ContentProperty), |
|
|
Name = "PART_ContentPresenter", |
|
|
}; |
|
|
[~ScrollContentPresenter.ContentProperty] = parent.GetObservable(ScrollViewer.ContentProperty), |
|
|
|
|
|
[~~ScrollContentPresenter.ExtentProperty] = parent[~~ScrollViewer.ExtentProperty], |
|
|
|
|
|
[~~ScrollContentPresenter.OffsetProperty] = parent[~~ScrollViewer.OffsetProperty], |
|
|
|
|
|
[~~ScrollContentPresenter.ViewportProperty] = parent[~~ScrollViewer.ViewportProperty], |
|
|
|
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void Prepare(ListBox target) |
|
|
private void Prepare(ListBox target) |
|
|
|