我最近花了很长时间试图弄清楚如何在菜单上使用ItemContainerTemplate和UsesItemContainerTemplate属性。
基本上我的问题是,无论我做了什么,似乎都没有拿起模板。
<Menu Grid.Row="1" ItemsSource="{Binding MenuItems}" UsesItemContainerTemplate="True">
<Menu.Resources>
<ItemContainerTemplate DataType="{x:Type vm:SeparatorViewModel}">
<Separator />
</ItemContainerTemplate>
<ItemContainerTemplate DataType="{x:Type vm:ActionItemViewModel}">
<MenuItem Header="{Binding Path=Caption}" ItemsSource="{Binding SubItems}" />
</ItemContainerTemplate>
</Menu.Resources>
</Menu>
它总是只使用MenuItem作为容器。
但为什么?
答案 0 :(得分:6)
解决方案当然很简单。 MenuItem模板还必须将其UsesItemContainerTemplate属性设置为true。
<Menu Grid.Row="1" ItemsSource="{Binding MenuItems}" UsesItemContainerTemplate="True">
<Menu.Resources>
<ItemContainerTemplate DataType="{x:Type vm:SeparatorViewModel}">
<Separator />
</ItemContainerTemplate>
<ItemContainerTemplate DataType="{x:Type vm:ActionItemViewModel}">
<MenuItem **UsesItemContainerTemplate="True"** Header="{Binding Path=Caption}" ItemsSource="{Binding SubItems}" />
</ItemContainerTemplate>
</Menu.Resources>
</Menu>
我希望这可以节省其他人花时间拉扯他们可能已经消退的发际线。
顺便说一下,我无法使用'ItemContainerTemplate'和'UsesItemContainerTemplate'正确地标记这个,因为我的声誉显然太低了,所以如果有人能做到这一点,那就太棒了。
阿迪奥斯。