填充菜单时如何使用ItemContainerTemplate?

时间:2013-11-17 12:39:18

标签: wpf menu datatemplate

我最近花了很长时间试图弄清楚如何在菜单上使用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作为容器。

但为什么?

1 个答案:

答案 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'正确地标记这个,因为我的声誉显然太低了,所以如果有人能做到这一点,那就太棒了。

阿迪奥斯。