| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |