我在编写 xaml 表示以允许绑定(bind)到我的背景 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
没有 child 。
解决方案是使用 HierarchicalDataTemplate
反而:
<ContextMenu ItemsSource="{Binding Choices}" >
<ContextMenu.Resources>
<HierarchicalDataTemplate DataType="{x:Type vmi:MenuNode}" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Header}"/>
</HierarchicalDataTemplate>
</ContextMenu.Resources>
</ContextMenu>
关于xaml - MVVM 的 WPF MenuItem 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585594/