【发布时间】:2010-10-14 13:19:40
【问题描述】:
假设您有一个嵌套的元素结构,例如带有 MenuItems 的 ContextMenu:
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem Style="{StaticResource FooMenuItemStyle}"/>
...
</ContextMenu>
您可以轻松地将样式或模板应用于 ContextMenu 或 MenuItem 元素。但是,如果 MenuItem 样式属于 Menu 样式,则将其添加到每个 MenuItem 元素中是非常麻烦和多余的。
有没有办法自动将这些应用到子元素?这样你就可以简单地写这个:
<ContextMenu Style="{StaticResource FooMenuStyle}">
<MenuItem/>
...
</ContextMenu>
如果 FooMenuStyle 可以设置包含 MenuItem 元素的样式,那就太好了,但这似乎是不可能的。
编辑:Menu 示例可能具有误导性,因为我不知道 ItemContainerStyle 并且其意图是提供通用解决方案。基于这两个答案,我提出了两种解决方案:一种是通用变体,一种是 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>
【问题讨论】:
标签: wpf nested styles children