我正在使用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}"/>
答案 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,检查出来。