WPF MenuItem孩子没有显示

时间:2009-06-01 02:53:34

标签: c# wpf datatemplate menuitem children

我正在使用ObjectDataProvider和DataTemplate来填充菜单栏中的MenuItem。 (WPF,C#/ XAML)见下面的snipet。

结果:出现顶部菜单项,当我点击它时,包装菜单项(带有绑定标题文本的项目)与小箭头一起显示,表示存在子项但是悬停或单击箭头不显示孩子们,他们无法进入。

预期结果:孩子们可见并且行为正常。

段:

<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 个答案:

答案 0 :(得分: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 :(得分:0)

menuitem控件的ItemSsource属性用于为该项目提供子项,尝试将<ContentPresenter />与该datatemplate一起使用。

答案 2 :(得分:0)

经过一周多的搜索,我终于找到了如何正常工作的方法。事实证明,DataTemplates对于动态菜单来说效果不是很好。正确的方法是使用MenuItem的ItemContainerStyle属性。 (或者是ItemStyleContainer?)

只需创建一个样式来覆盖标题并将其设置为您需要的任何内容。我他们覆盖了ItemsSource以包括我的孩子们。但是在这里要小心,因为孩子们将继承风格并且每个人都有相同的孩子并生成递归菜单。您需要覆盖子项的ItemsSource并将其设置为空的x:Array或类似。

有几个博客描述了如何使用ItemContainerStyle,检查出来。