WPF-Menü - So verwenden Sie eine andere Vorlage für Elemente der obersten Ebene
Ich möchte meinem WPF-Menü-Steuerelement unterschiedliche Vorlagen zuweisen, je nachdem, ob es sich bei dem Element um ein Element der obersten Ebene handelt oder nicht. Insbesondere möchte ich ein größeres Symbolübe der Text für Elemente der obersten Ebene und ein kleineres Symbolnach link des Textes für die anderen Elemente.
Dies ist die (funktionierende) XAML, die ich gerade verwende. Sie formatiert die Elemente der obersten Ebene korrekt, lässt aber die anderen Elemente albern und zu groß aussehen:
<WrapPanel Height="Auto">
<Menu ItemsSource="{Binding DataContext.EventMenu.TopLevel, ElementName=UserControl}">
<Menu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter" Value="{Binding EventType}"/>
</Style>
</Menu.ItemContainerStyle>
<Menu.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Image Grid.Row="0" Width="32" Height="32" Margin="5" VerticalAlignment="Center" Source="{Binding Icon32}"/>
<TextBlock Grid.Row="1" Margin="5" Text="{Binding Name}"/>
</Grid>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
</Menu>
</WrapPanel>
Ich möchte, dass die anderen Elemente eine Vorlage wie diese haben:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Height="*"/>
<ColumnDefinition Height="Auto"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Width="16" Height="16" Margin="5" VerticalAlignment="Center" Source="{Binding Icon16}"/>
<TextBlock Grid.Column="1" Margin="5" Text="{Binding Name}"/>
</Grid>
Wie kann ich zwei verschiedene Vorlagen haben, die sich durch "Top-Levelness" auszeichnen? Ich würde es vorziehen, keine Eigenschaft hinzufügen zu müssen, um anzugeben, welches Element auf oberster Ebene ist, kann dies jedoch bei Bedarf tun.