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 を認識しておらず、その意図は一般的な解決策であったため、メニューの例はおそらく誤解を招く可能性があります。2 つの回答に基づいて、2 つの解決策を考え出しました。1 つは一般的なバリアントで、もう 1 つは 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>