我在编写xaml表示形式以允许绑定到我的背景ViewModel进行级联菜单时遇到麻烦

这是虚拟机:

public class MenuNode
{
  public string Header {get;}
  public List<MenuNode> Items {get;}
}


我拥有的XAML是这样的:

<ContextMenu ItemsSource="{Binding Choices}" >
    <ContextMenu.Resources>
        <DataTemplate DataType="{x:Type vmi:MenuNode}">
            <MenuItem Header="{Binding Header}" ItemsSource="{Binding Items}"/>
        </DataTemplate>
    </ContextMenu.Resources>
</ContextMenu>


当菜单弹出时,我会看到带有箭头的第一级条目(指示应该有一个子菜单),但是当我将鼠标悬停在菜单上时,它不会显示子菜单项。

有任何想法吗?

最佳答案

好的,这是问题所在:

出于某些原因,由您的MenuItems生成的DataTemplate被包裹在另一个MenuItem内部(结果嵌套了MenuItems)。由于外部MenuItem没有子项,因此未打开子项。

解决方案是改用HierarchicalDataTemplate

<ContextMenu ItemsSource="{Binding Choices}" >
    <ContextMenu.Resources>
        <HierarchicalDataTemplate DataType="{x:Type vmi:MenuNode}" ItemsSource="{Binding Items}">
            <TextBlock Text="{Binding Header}"/>
        </HierarchicalDataTemplate>
    </ContextMenu.Resources>
</ContextMenu>

07-24 09:47
查看更多