|
|
|
@ -6,6 +6,7 @@ using System.ComponentModel; |
|
|
|
using System.Linq; |
|
|
|
using System.Runtime.CompilerServices; |
|
|
|
using Avalonia.Collections; |
|
|
|
using Avalonia.Controls.Generators; |
|
|
|
using Avalonia.Controls.Presenters; |
|
|
|
using Avalonia.Controls.Templates; |
|
|
|
using Avalonia.Data; |
|
|
|
@ -24,7 +25,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
public class TreeViewTests |
|
|
|
{ |
|
|
|
MouseTestHelper _mouse = new MouseTestHelper(); |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Items_Should_Be_Created() |
|
|
|
{ |
|
|
|
@ -675,7 +676,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.Same(node, focus.Current); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Keyboard_Navigation_Should_Not_Crash_If_Selected_Item_Is_not_In_Tree() |
|
|
|
{ |
|
|
|
@ -1166,6 +1167,34 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.Empty(target.ItemContainerGenerator.Index.Containers); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Can_Use_Derived_TreeViewItem() |
|
|
|
{ |
|
|
|
var tree = CreateTestTreeData(); |
|
|
|
var target = new DerivedTreeViewWithDerivedTreeViewItems |
|
|
|
{ |
|
|
|
Template = CreateTreeViewTemplate(), |
|
|
|
Items = tree, |
|
|
|
}; |
|
|
|
|
|
|
|
ApplyTemplates(target); |
|
|
|
|
|
|
|
// Verify that all items are DerivedTreeViewItem
|
|
|
|
VerifyItemType(target.ItemContainerGenerator); |
|
|
|
|
|
|
|
void VerifyItemType(ITreeItemContainerGenerator containerGenerator) |
|
|
|
{ |
|
|
|
foreach (var container in containerGenerator.Index.Containers) |
|
|
|
{ |
|
|
|
var item = Assert.IsType<DerivedTreeViewItem>(container); |
|
|
|
if (item.ItemCount > 0) |
|
|
|
{ |
|
|
|
VerifyItemType(item.ItemContainerGenerator); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void ApplyTemplates(TreeView tree) |
|
|
|
{ |
|
|
|
tree.ApplyTemplate(); |
|
|
|
@ -1376,6 +1405,17 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
private class DerivedTreeViewWithDerivedTreeViewItems : TreeView |
|
|
|
{ |
|
|
|
protected override ITreeItemContainerGenerator CreateTreeItemContainerGenerator() => |
|
|
|
CreateTreeItemContainerGenerator<DerivedTreeViewItem>(); |
|
|
|
} |
|
|
|
|
|
|
|
private class DerivedTreeViewItem : TreeViewItem |
|
|
|
{ |
|
|
|
protected override IItemContainerGenerator CreateItemContainerGenerator() => CreateTreeItemContainerGenerator<DerivedTreeViewItem>(); |
|
|
|
} |
|
|
|
|
|
|
|
private class TestDataContext : INotifyPropertyChanged |
|
|
|
{ |
|
|
|
private string _selectedItem; |
|
|
|
@ -1398,7 +1438,7 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|