WPF MenuItem 子项未显示

5 c# wpf children datatemplate menuitem

我正在使用 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}"/>
Run Code Online (Sandbox Code Playgroud)

小智 1

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

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

有几个博客描述了如何使用 ItemContainerStyle,请查看它们。