C# 自定义菜单内容

C# 自定义菜单内容,c#,wpf,xaml,C#,Wpf,Xaml,我正在尝试构建自定义菜单(意味着我要为菜单项设置模板) 以及视图模型 public class MainViewModel : ViewModelBase { public ObservableCollection<MenuItemViewModel> MenuItems { get; set; } public MainViewModel() { MenuItems = new Observabl

我正在尝试构建自定义菜单(意味着我要为菜单项设置模板)


以及视图模型

public class MainViewModel : ViewModelBase
    {
        public ObservableCollection<MenuItemViewModel> MenuItems { get; set; }

        public MainViewModel()
        {
            MenuItems = new ObservableCollection<MenuItemViewModel>
            {
                new MenuItemViewModel("File")
                {
                    MenuItems = new ObservableCollection<MenuItemViewModel>
                    {
                        new MenuItemViewModel("New"),
                        new MenuItemViewModel("Open"),
                        new MenuItemViewModel("Close"),
                    }
                },
                new MenuItemViewModel("Edit")
                {
                    MenuItems = new ObservableCollection<MenuItemViewModel>
                    {
                        new MenuItemViewModel("Cut"),
                        new MenuItemViewModel("Copy"),
                        new MenuItemViewModel("Paste"),
                    }
                },

            };

        }
    }
public类MainViewModel:ViewModelBase
{
公共ObservableCollection菜单项{get;set;}
公共主视图模型()
{
MenuItems=新的可观察集合
{
新MenuItemViewModel(“文件”)
{
MenuItems=新的可观察集合
{
新MenuItemViewModel(“新”),
新MenuItemViewModel(“打开”),
新MenuItemViewModel(“关闭”),
}
},
新MenuItemViewModel(“编辑”)
{
MenuItems=新的可观察集合
{
新MenuItemViewModel(“Cut”),
新MenuItemViewModel(“副本”),
新MenuItemViewModel(“粘贴”),
}
},
};
}
}
问题是我看到了第一个层次——“文件”和“编辑” 但不是他们的孩子

在史努比我可以看到他们有孩子

如果我删除这行:

<Setter Property="Template" Value="{StaticResource MenuItemControlTemplate1}" />

它也像预期的那样工作。。。
问题是我确实需要为菜单项设置模板…

您的自定义模板中没有显示子项的内容。每当您想要创建一个自定义控件模板时,您都应该查找第一个模板,以确保没有遗漏任何重要内容

在中,您会注意到它包含以下内容:

<StackPanel  
    IsItemsHost="True" 
    KeyboardNavigation.DirectionalNavigation="Cycle" />

任何
项控件
(MenuItem扩展)都需要
面板
元素作为其
项列表
。因此,将此元素添加到模板中的某个位置


如果所有其他操作都失败,请尝试按原样使用示例模板。然后,您可以使用它来更好地理解它。

IsItemsHost确实显示了其他项目,但没有显示在适当的位置。。。如何使用模板?它们对于每个层次结构都是分开的,您可以粘贴使用它的示例吗?由于模板已经包含IsItemsHost=True,我尝试将它们复制粘贴到我的代码中,并使用MenuItem样式,如下所示:但仍然相同。。。
<StackPanel  
    IsItemsHost="True" 
    KeyboardNavigation.DirectionalNavigation="Cycle" />