2013-06-12 13 views
1

我創建了以下菜單。現在,我想在不同的窗口上使用相同的菜單佈局,並考慮將下面的代碼移到Generic.xaml,並只在需要時引用它。做到這一點的最佳方式是什麼,以便實際使用盡可能短?重用Menu.ItemContainerStyle

<MenuHeight="27"VerticalAlignment="Top" ItemsSource="{Binding Menu}"> 
    <Menu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
      <Setter Property="Command" Value="{Binding Execute}"/> 
      <Setter Property="Icon" Value="{Binding Icon}" /> 
      <Setter Property="ToolTip" Value="{Binding ToolTip}"/> 
     </Style> 
    </Menu.ItemContainerStyle> 
    <Menu.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Children}" > 
      <TextBlock Text="{Binding Header}" /> 
      <HierarchicalDataTemplate.ItemContainerStyle> 
       <Style TargetType="MenuItem"> 
        <Setter Property="Command" Value="{Binding Execute}"/> 
        <Setter Property="Icon" Value="{Binding Icon}" /> 
        <Setter Property="ToolTip" Value="{Binding ToolTip}"/> 
       </Style> 
      </HierarchicalDataTemplate.ItemContainerStyle> 
     </HierarchicalDataTemplate> 
    </Menu.ItemTemplate> 
</Menu> 

回答

3

將這種在資源,它會在範圍被應用到每一個菜單:

<Style x:Key="{x:Type Menu}" TargetType="Menu"> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <Style TargetType="MenuItem"> 
       <Setter Property="Command" Value="{Binding Execute}"/> 
       <Setter Property="Icon" Value="{Binding Icon}" /> 
       <Setter Property="ToolTip" Value="{Binding ToolTip}"/> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <HierarchicalDataTemplate ItemsSource="{Binding Children}" > 
       <TextBlock Text="{Binding Header}" /> 
       <HierarchicalDataTemplate.ItemContainerStyle> 
        <Style TargetType="MenuItem"> 
         <Setter Property="Command" Value="{Binding Execute}"/> 
         <Setter Property="Icon" Value="{Binding Icon}" /> 
         <Setter Property="ToolTip" Value="{Binding ToolTip}"/> 
        </Style> 
       </HierarchicalDataTemplate.ItemContainerStyle> 
      </HierarchicalDataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>