2010-03-12 45 views
1

我已經爲MenuItem和ContextMenu創建了自定義樣式和模板,並且對於我的第一級,這很好,但每當添加SubMenu項目時,該ContextMenu的樣式都會恢復爲默認樣式。我如何確保該項目使用我的自定義樣式?我嘗試過使用<; Style TargetType =「ContextMenu」Key =「{x:Type ContextMenu}」語法,它似乎也沒有重寫它。在子項目上設置ContextMenu的樣式

回答

2

問題是該樣式正在應用於ContextMenu的子菜單項。由於它們本身就是ItemsControls,所以孫子們從MenuItem樣式中拾取ItemContainerStyle。我建議將MenuItem風格拉到一個單獨的資源,然後像這樣使用它:

<Style x:Key="menuItemStyle" TargetType="{x:Type MenuItem}"> 
    ... 
</Style> 

<Style TargetType="{x:Type ContextMenu}"> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource menuItemStyle}"> 
       <Setter Property="ItemContainerStyle" Value="{StaticResource menuItemStyle}" /> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

嗨安倍,你可以看看一個相關的問題,以及? http://stackoverflow.com/questions/4430807/prevent-itemcontainerstyle-overriding-already-set-style。會很棒,謝謝! – Dr1Ku 2011-01-10 10:22:56

相關問題