WPF ContextMenu Style Structure

I would like to restyle a ContextMenu, but I have a question on how to structure my Xaml.

In my application resources, I have something like this:

<ControlTemplate TargetType="MenuItem" x:Key="MenuItemTemplate">
    ...
</ControlTemplate>

<ControlTemplate TargetType="ContextMenu" x:Key="ContextMenuTemplate">
    <ControlTemplate.Resources>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Template" Value="{StaticResource MenuItemTemplate}" />
        </Style>
    </ControlTemplate.Resources>

    ...    

</ControlTemplate>

<Style TargetType="{x:Type ContextMenu}" x:Key="RadialContextMenu">
    <Setter Property="Template" Value="{StaticResource ContextMenuTemplate}" />
</Style>

It seems that this is normal, context menus with style ContextMenuTemplatehave stylized menu items, and other context menus are not affected, without the need to explicitly indicate the style on any MenuItems.

<ContextMenu x:Name="menu" Style="{StaticResource RadialContextMenu}">
    <MenuItem Header="Foo"/>
    <MenuItem Header="Bar"/>
</ContextMenu>

However, I do not like this section ControlTemplate.Resources. I would prefer this, for example, inside a style x:Key="RadialContextMenu", so both control patterns are โ€œcleanโ€.

How can I move a Style element from the second ControlTemplate?

+3
source share
1

:

<Style TargetType="{x:Type ContextMenu}" x:Key="RadialContextMenu">
    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="Template" Value="{StaticResource MenuItemTemplate}" />
            </Style>
        </Setter.Value>
    </Setter>
</Style>
+3

Source: https://habr.com/ru/post/1709995/


All Articles