Suponga que tiene una estructura de elemento anidado, por ejemplo, un ContextMenu con MenuItems:Styling elementos anidados en WPF
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem Style="{StaticResource FooMenuItemStyle}"/>
...
</ContextMenu>
Usted puede aplicar fácilmente estilos o plantillas para los elementos ContextMenu o MenuItem. Pero si el estilo de MenuItem pertenece al estilo de menú, es bastante engorroso y redundante agregarlo a cada elemento de MenuItem.
¿Hay alguna forma de aplicar esos automáticamente a los elementos secundarios? Por lo que sólo tiene que escribir esto:
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem/>
...
</ContextMenu>
Sería interesante si podía FooMenuStyle estilo contiene elementos MenuItem, pero eso no parece ser posible.
Editar: El ejemplo de menú probablemente sea engañoso ya que no conocía ItemContainerStyle y la intención era una solución general. Sobre la base de las dos respuestas que he llegado con dos soluciones: una variante en general y uno para ItemContainerStyle y similares:
<Style x:Key="FooMenuItem" TargetType="{x:Type MenuItem}">
...
</Style>
<Style x:Key="FooMenu" TargetType="{x:Type ContextMenu}">
<!-- Variant for specific style attribute -->
<Setter Property="ItemContainerStyle"
Value="{StaticResource FooMenuItem}"/>
<!-- General variant -->
<Style.Resources>
<Style TargetType="{x:Type MenuItem}"
BasedOn="{StaticResource FooMenuItem}"/>
</Style.Resources>
</Style>
<ContextMenu Style="{StaticResource FooMenu}">
<MenuItem/>
</ContextMenu>
creo que ya tiene un estilo en sus recursos y quisiera aplicar a artículos para niños, no volver a declararlo de nuevo. –
Además, se puede expresar más claramente mediante el uso del ItemContainerStyle. –
Puede declarar un nuevo estilo derivado de un estilo anterior. –