在WPF中设置嵌套元素的样式

假设你有一个嵌套的元素结构,例如一个带MenuItems的ContextMenu:

<ContextMenu Style="{StaticResource FooMenuStyle}"> <MenuItem Style="{StaticResource FooMenuItemStyle}"/> ... </ContextMenu> 

您可以轻松地将样式或模板应用于ContextMenu或MenuItem元素。 但是,如果MenuItem样式属于Menu样式,将其添加到每个MenuItem元素是非常麻烦和冗余的。

有没有办法将这些自动应用到子元素? 所以你可以简单的写下这个:

 <ContextMenu Style="{StaticResource FooMenuStyle}"> <MenuItem/> ... </ContextMenu> 

如果FooMenuStyle可以包含MenuItem元素的样式,这将是整洁,但似乎不可能。

编辑:菜单的例子可能是误导,因为我不知道ItemContainerStyle和意图是一个通用的解决scheme。 基于这两个答案,我提出了两个解决scheme:一个通用的变体和一个ItemContainerStyle等:

 <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> 
 <ContextMenu> <ContextMenu.Resources> <Style TargetType="{x:Type MenuItem}"> <!--Setters--> </Style> </ContextMenu.Resources> <MenuItem/> <!--Other MenuItems--> </ContextMenu> 

该样式将应用于ContextMenu中的所有MenuItem对象。

只是为了完成原来的答案,我认为这是更明确的添加嵌套的风格,如父母:

 <Style x:Key="WindowHeader" TargetType="DockPanel" > <Setter Property="Background" Value="AntiqueWhite"></Setter> <Style.Resources> <Style TargetType="Image"> <Setter Property="Margin" Value="6"></Setter> <Setter Property="Width" Value="36"></Setter> <Setter Property="Height" Value="36"></Setter> </Style> <Style TargetType="TextBlock"> <Setter Property="TextWrapping" Value="Wrap"></Setter> </Style> </Style.Resources> </Style> 
 <ContextMenu ItemContainerStyle="{StaticResource FooMenuItemStyle}"> <MenuItem/> </ContextMenu>