Я действительно не посмотрел, что вы сделали неправильно, я опубликую код, который работает вместо этого.
<Menu ItemsSource="{Binding Menus}" Name="menu" Height="20">
<Menu.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type plugin:MenuEntry}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="Icon" Value="{Binding Icon}" />
<Setter Property="InputGestureText" Value="{Binding InputGestureText}" />
<Setter Property="IsCheckable" Value="{Binding IsCheckable}" />
<Setter Property="IsChecked" Value="{Binding IsChecked}" />
<!-- Handle separators -->
<Style.Triggers>
<DataTrigger Binding="{Binding Header}" Value="[Separator]">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Separator />
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<ContentControl Content="{Binding Header}"/>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
</Menu>
Меню связано с простой коллекцией объектов, которые имеют все свойства, такие как заголовок, значок и т. Д.У них также есть свойство Items, которое содержит подэлементы.
Это не совсем то, что вы ищете, но, возможно, вы сможете это исправить.Я помню, как пробовал подобный подход, как ты, и я помню, как терпел неудачу.Menu генерирует объект MenuItem сам по себе (и вы пытаетесь добавить в него еще один - вы не должны этого делать, вам нужно только стилизовать его вместо этого), также эти два элемента управления элементов выглядят немного странно для меня (хотя я понимаю,они вам нужны).