我在编写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>