2013-10-04 32 views
0

默認wpf MenuItem(在菜單上)是由控件構成的。像這樣:
grid;外矩形; BG-矩形;內的矩形; dockpanel;彈出。我可以用默認樣式覆蓋/替換子項目的屬性嗎?

碼頭板依次包括:
contentpresenter [icon];路徑; contentpresenter [文本]

contentpresenter [文本]TextBlock控制的。

我想達到的目標是定義一個Style,儘可能簡單,要改變這種TextBlockVerticalAlignment屬性,但僅適用於MenuItemTextBlock,不是一般的。

<Style x:Key ="TextBlockCenterStyle" TargetType="{x:Type TextBlock}"> 
     <Setter Property="VerticalAlignment" Value="Center" /> 
    </Style> 

<Style TargetType="MenuItem"> 
     <Setter Property="FontSize" Value="11" /> 
     <Setter Property="ItemContainerStyle" Value="TextBlockCenterStyle" /> 
     <Style.Resources> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="VerticalAlignment" Value="Center" /> 
      </Style> 
     </Style.Resources> 
</Style> 

我試過Style.ResourcesItemContainerStyle
無法正常工作。 ItemContainerStyle在運行時拋出TargetInvocationException(來自NullReferenceException)。
當它可能應該是一個通用的解決方案,像FindChildControl?!

+0

它是一個項目上下文菜單或菜單? – Nitin

+0

@Gerard,你是否設法解決你的問題? – sexta13

回答

0

你試過ItemContainerStyle嗎?

喜歡的東西:

<MenuItem ItemContainerStyle = {StaticResource MyItemContainerStyle}../> 

然後MyItemContainerStyle有你

<Style x:Key ="MyItemContainerStyle" TargetType="{x:Type TextBlock}"> 
       <Setter Property="VerticalAlignment" Value="Center" /> 
      </Style> 

===============答案編輯後====== ================ 試試這個:

<Style TargetType="MenuItem"> 
     <Setter Property="FontSize" Value="11" /> 
     <Setter Property="ItemContainerStyle" Value="{StaticResource TextBlockCenterStyle}" /> 
     <Style.Resources> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="VerticalAlignment" Value="Center" /> 
      </Style> 
     </Style.Resources> 
</Style> 
+0

無法啓動它,請參閱我的編輯。 – Gerard