| 
					
				 | 
			
			
				@@ -3,7 +3,9 @@ using System.Collections.Generic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using System.Text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using System.Windows.Input; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Collections; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Controls.Presenters; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Controls.Primitives; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Controls.Templates; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Input; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Platform; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -348,6 +350,46 @@ namespace Avalonia.Controls.UnitTests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void Menu_ItemTemplate_Should_Be_Applied_To_TopLevel_MenuItem_Header() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using var app = Application(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var items = new[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new MenuViewModel("Foo"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new MenuViewModel("Bar"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var itemTemplate = new FuncDataTemplate<MenuViewModel>((x, _) => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new TextBlock { Text = x.Header }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var menu = new Menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ItemTemplate = itemTemplate, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ItemsSource = items, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var window = new Window { Content = menu }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            window.LayoutManager.ExecuteInitialLayoutPass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var panel = Assert.IsType<StackPanel>(menu.Presenter.Panel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Assert.Equal(2, panel.Children.Count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (var i = 0; i <  panel.Children.Count; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var menuItem = Assert.IsType<MenuItem>(panel.Children[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(items[i], menuItem.Header); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var headerPresenter = Assert.IsType<ContentPresenter>(menuItem.HeaderPresenter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Same(itemTemplate, headerPresenter.ContentTemplate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var headerControl = Assert.IsType<TextBlock>(headerPresenter.Child); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(items[i].Header, headerControl.Text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private IDisposable Application() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             var screen = new PixelRect(new PixelPoint(), new PixelSize(100, 100)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -401,5 +443,7 @@ namespace Avalonia.Controls.UnitTests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             public void RaiseCanExecuteChanged() => _canExecuteChanged?.Invoke(this, EventArgs.Empty); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private record MenuViewModel(string Header); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |