Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 填充菜单时如何使用ItemContainerTemplates?_Wpf_Menu_Datatemplate - Fatal编程技术网

Wpf 填充菜单时如何使用ItemContainerTemplates?

Wpf 填充菜单时如何使用ItemContainerTemplates?,wpf,menu,datatemplate,Wpf,Menu,Datatemplate,我最近花了太长时间试图弄清楚如何使用菜单上的ItemContainerTemplate和UsesItemContainerTemplate属性 基本上,我的问题是,无论我做了什么,它似乎都没有抓住模板 <Menu Grid.Row="1" ItemsSource="{Binding MenuItems}" UsesItemContainerTemplate="True"> <Menu.Resources> <ItemContainerTemp

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


但是为什么呢?

解决方案当然非常简单。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”标记它,因为我的声誉显然太低了,所以如果有人能做到这一点,那就太好了


Adios.

我假设添加UseItemContainerTemplate只适用于有子项的情况,对吗?