Я хотел бы применить различные шаблоны к моему элементу управления WPF в зависимости от того, является ли элемент элементом «верхнего уровня» или нет. В частности, я хочу увеличить значок выше текст для элементов верхнего уровня и меньший значок влево текста для других элементов.Меню WPF - Как использовать другой шаблон для элементов верхнего уровня
Это (рабочий) XAML я использую сейчас, что правильно форматирует элементы верхнего уровня, но оставляет другие элементы выглядеть глупо и слишком большой:
<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>
Я хотел бы другой чтобы иметь такой шаблон:
<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>
Как я могу иметь два разных шаблона, отличающихся «высшей степенью». Я бы предпочел не добавлять свойство, чтобы указать, что является элементом верхнего уровня, но при необходимости может сделать это.
Мои предметы взяты из привязки модели. Как я могу позволить WPF узнать, какие из них получают явный стиль? –
Если вы уже знаете тип, вы можете использовать DataType DataTemplate. – WPFUser
Все объекты в дереве меню одного типа. –