2015-04-03 2 views
0

Кажется, что стиль верхнего уровня MenuItem UIElements отличается от нижнего уровня MenuItems. Я хотел бы использовать тот же стиль на верхнем уровне, что и суб-уровни. Как я могу заменить стиль верхнего уровня на уровень дополнительного уровня?Использование MenuItem.SubmenuItemTemplateKey в пунктах меню верхнего уровня

Я вижу, есть ResourceKey для обоих стилей ... MenuItem.SubmenuItemTemplateKey и MenuItem.TopLevelItemTemplateKey

ответ

1

Создать ControlTemplate для TargetType из MenuItem и использовать его как для:

<ControlTemplate x:Key="MyMenuItemTemplateKey" TargetType="MenuItem"> 
    <Grid Name="Border" Height="25"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="32" SharedSizeGroup="Icon"/> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/> 
      <ColumnDefinition Width="13"/> 
     </Grid.ColumnDefinitions> 
     <Border Name="BorderIcon" Grid.Column="0" BorderBrush="Red" BorderThickness="0,0,1,0"> 
      <ContentPresenter Name="Icon" Margin="5,0,5,0" VerticalAlignment="Center" ContentSource="Icon"/> 
     </Border> 
     <ContentPresenter Name="HeaderHost" Grid.Column="1" ContentSource="Header" Margin="5,0,0,0" VerticalAlignment="Center" RecognizesAccessKey="True"/> 
     <TextBlock x:Name="InputGestureText" Grid.Column="2" Text="{TemplateBinding InputGestureText}" Margin="10,2,2,2" VerticalAlignment="Center" DockPanel.Dock="Right" /> 
     <Border Name="BorderChecked" Grid.Column="3" CornerRadius="2" Background="Transparent" Margin="5,2,5,2"/> 
     <Border Name="BorderDisable" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Transparent"/> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="Icon" Value="{x:Null}"> 
      <Setter TargetName="Icon" Property="Visibility" Value="Hidden"/> 
     </Trigger> 
     <Trigger Property="IsHighlighted" Value="true"> 
      <Setter TargetName="Border" Property="Background" Value="Blue"/> 
     </Trigger> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter TargetName="BorderChecked" Property="Background" Value="Green"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter TargetName="BorderDisable" Property="Background" Value="#3FFFFFFF"/> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="True"> 
      <Setter Property="Foreground" Value="Black"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

И создайте стиль, в котором вы определяете оба шаблона с одним и тем же шаблоном:

<Style x:Key="MyMenuItemStyle" TargetType="MenuItem"> 
    <Setter Property="OverridesDefaultStyle" Value="True"/> 
    <Setter Property="FontFamily" Value="Verdana"/> 
    <Setter Property="FontSize" Value="8.5pt"/> 
    <Style.Triggers> 
     <Trigger Property="Role" Value="TopLevelItem"> 
      <Setter Property="Template" Value="{StaticResource MyMenuItemTemplateKey}"/> 
     </Trigger> 

     <Trigger Property="Role" Value="SubmenuItem"> 
      <Setter Property="Template" Value="{StaticResource MyMenuItemTemplateKey}"/> 
     </Trigger> 
     <Trigger Property="IsChecked" Value="True"> 
      <Setter Property="Foreground" Value="Green"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Thanks Nawed. Могу ли я пропустить создание ControlTemplate и просто использовать SubmenuItemTemplateKey вместо MyMenuItemTemplateKey для верхнего и дополнительного шаблонов? – flobadob

+0

Я пробовал ваше решение, но меню отображается по-прежнему, как с верхним, так и с подменю, используя разные стили. – flobadob

+0

Возможно, нам стоит повернуть его, и не могли бы вы объяснить, что именно вы хотите достичь? Вы также можете посмотреть страницу MSDN: https://msdn.microsoft.com/en-us/library/ms747082%28v=vs.85%29.aspx для получения дополнительной информации. Очень просто создать один стиль для всего элемента меню и 4 шаблона элементов, по одному для каждого сценария: TopLevelHeader, TopLevelItem, SubmenuHeader, SubmenuItem. Идея состоит в том, что в подменю будут отображаться значки и ссылки на ярлыки, но не в верхнем меню. –

Смежные вопросы