I have a WPF Control template for the MenuItem
type:
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Background"
Value="Transparent" />
<Setter Property="Cursor"
Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border Background="{TemplateBinding Background}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentControl Content="{TemplateBinding Header}"
Margin="5"
Grid.Column="1" />
<Path Grid.Column="2"
x:Name="Indicator"
Data="M1,1 L1,9 9,5Z"
Fill="{StaticResource GlyphBrush}"
Margin="4"
Visibility="Hidden"
VerticalAlignment="Center" />
<Popup Name="PART_Popup"
Placement="Right"
IsOpen="{TemplateBinding IsSubmenuOpen}"
AllowsTransparency="True"
Grid.Column="0"
Grid.ColumnSpan="2"
HorizontalOffset="3"
VerticalOffset="-1">
<Border Background="Transparent">
<ContentControl Style="{StaticResource PopupContentStyle}">
<ItemsPresenter/>
</ContentControl>
</Border>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked"
Value="true">
<Setter Property="Background"
Value="{StaticResource ButtonHoverBackgroundBrush}" />
</Trigger>
<Trigger Property="IsChecked"
Value="false">
<Setter Property="Background"
Value="{StaticResource BackgroundBrush}" />
</Trigger>
<Trigger Property="HasItems"
Value="True">
<Setter TargetName="Indicator"
Property="Visibility"
Value="Visible" />
</Trigger>
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Opacity"
Value="{StaticResource DisabledTransparency}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="{StaticResource ButtonHoverBackgroundBrush}" />
</Trigger>
</Style.Triggers>
</Style>
If I do now add items to a MenuItem
the template works flawless. But if I try to add items to a bound ObservableCollection
I run into problems as my ControlTemplate
does not use the ItemTemplate
of the original MenuItem
anywhere.
This usage causes problems:
<MenuItem Header="{userInterface:Translation Language}"
ItemsSource="{Binding AvailableLanguages}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ChangeLanguageCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Header}"
Header="{Binding}" />
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
The MenuItem
does not use the Template
I specified above, instead it does again take my default template.
I tried changing the ItemsPresenter
of my global template to a ItemsControl
but it did change nothing.
How can I solve the problem?