Pergunta

Eu gostaria de remodelar um ContextMenu, mas eu tenho uma pergunta sobre como estruturar minha XAML.

Em meus recursos do aplicativo, eu tenho algo parecido com isto:

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

Este parece funcionar bem, menus de contexto com o estilo ContextMenuTemplate ter estilo itens do menu, e outros menus de contexto não são afetados, sem ter que definir um estilo explicitamente em qualquer MenuItems.

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

No entanto, eu não gosto de ter essa seção ControlTemplate.Resources. Eu prefiro tê-lo, por exemplo, dentro do estilo x:Key="RadialContextMenu", de modo que ambos os modelos de controle são "limpa".

Como posso mover o elemento de estilo fora do segundo ControlTemplate?

Foi útil?

Solução

Tente isto:

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top