2009-06-08 309 views
3

私はContextMenuのスタイルを変更したいと思いますが、Xamlをどのように構造化するかについての質問があります。私のアプリケーションのリソースでWPF ContextMenuスタイル構造

、私はこのようなものがあります:

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

をこれが正常に動作するよう、ContextMenuTemplateスタイルのコンテキストメニューは、メニュー項目をスタイリングしており、他のコンテキストメニューは影響を受けません、設定する必要はありません任意のMenuItemsのスタイルを明示的に使用します。

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

しかし、私はそれがControlTemplate.Resourcesセクションを持っているのを好きではありません。私は多くの場合、たとえば、x:Key="RadialContextMenu"スタイルの中にそれを持っているので、両方のコントロールテンプレートが "きれい"です。

スタイル要素を2番目のControlTemplateから移動するにはどうすればよいですか?

答えて

3

これを試してみてください:

<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> 
関連する問題