WPF ContextMenu Стиль структуры - PullRequest
3 голосов
/ 08 июня 2009

Я хотел бы изменить стиль ContextMenu, но у меня есть вопрос о том, как структурировать мой Xaml.

В моих ресурсах приложения у меня есть что-то вроде этого:

<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>

Кажется, это работает нормально, контекстные меню со стилем ContextMenuTemplate имеют стилизованные пункты меню, а другие контекстные меню не затрагиваются, без необходимости явно устанавливать стиль для любого MenuItems.

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

Однако мне не нравится этот раздел ControlTemplate.Resources. Я бы предпочел иметь его, например, в стиле x:Key="RadialContextMenu", чтобы оба шаблона управления были «чистыми».

Как мне переместить элемент стиля из второго ControlTemplate?

1 Ответ

3 голосов
/ 08 июня 2009

Попробуйте это:

<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>
...