WPF菜单项的子菜单未显示

5
我正在使用ObjectDataProvider和DataTemplate来填充我的菜单栏中的一个MenuItem。(WPF,C#/XAML) 请参见下面的代码片段。
结果:顶部菜单项出现了,当我点击它时,包装菜单项(绑定标题文本的菜单项)出现,并显示有子项的小箭头,但是悬停或单击箭头不会显示子项,无法访问。
期望结果:子项可见并正常工作。
代码片段:
<ObjectDataProvider x:Key="Brokers" ObjectInstance="{x:Static brokers:BrokerManager.Instance}" MethodName="GetBrokers" IsAsynchronous="True" />
        <DataTemplate x:Key="BrokerMenuItem" DataType="IBroker">
            <MenuItem Header="{Binding Path=Name}">
                <MenuItem Header="Connect" />
                <MenuItem Header="Disconnect" />
            </MenuItem>
        </DataTemplate>

<MenuItem Header="Brokers" ItemsSource="{Binding Source={StaticResource Brokers}}" ItemTemplate="{DynamicResource BrokerMenuItem}"/>
3个回答

1

arsenmrkt: 我有完全相同的问题,如果我使用DataTemplate填充MenuItem,我似乎无法向任何生成的项添加子项。但我不明白你的答案,我应该如何使用ContentPresenter来解决这个问题?

编辑: 实际上,我的问题并不完全相同,因为我正在尝试将一组集合绑定到菜单。不过我认为我已经通过使用HierarchicalDataTemplate解决了这个问题:

<Menu>
    <MenuItem Header="{Binding Name}" ItemsSource="{Binding MenuOptions}">
        <MenuItem.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Categories}">
                <MenuItem Header="{Binding Name}"/>
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <MenuItem Header="{Binding Name}"/>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </MenuItem.ItemTemplate>
    </MenuItem>
</Menu>

这对你有帮助吗,NicholasF?

1

在搜索了一个星期后,我终于找到了如何使它正常工作的方法。原来DataTemplates对于动态菜单并不是很好用。正确的做法是使用MenuItem的ItemContainerStyle属性。(或者是ItemStyleContainer?)

只需创建一个样式来覆盖标题并将其设置为所需内容即可。然后我重写了ItemsSource以包括我的子项。但是要小心,在这里,子项将继承样式,并且每个子项都有相同的子项并生成递归菜单。您需要重写子项的ItemsSource并将其设置为空的x:Array或类似物。

有几篇博客介绍了如何使用ItemContainerStyle,请查看它们。


0
菜单项控件的ItemSource属性用于为该项提供子级,尝试在该DataTemplate中使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接