• WPF:MenuItem样式


    基础信息

    1、MenuItem 样式

        <Window.Resources>
    
            <Style TargetType="{x:Type MenuItem}">
                <!--<Setter Property="Background" Value="#999999" />-->
                <!--<Setter Property="Foreground" Value="#999999" />-->
                <!--MenuItem文字颜色和menu的文字颜色一样-->
                <!--<Setter Property="Foreground" Value="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Menu}}}"/>-->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type MenuItem}">
                            <Border x:Name="Border"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <!--<ColumnDefinition x:Name="Col0" SharedSizeGroup="MenuItemIconColumnGroup" MinWidth="17" Width="Auto"/>-->
                                        <ColumnDefinition Width="Auto"  SharedSizeGroup="MenuTextColumnGroup"/>
                                        <!--<ColumnDefinition Width="Auto"  SharedSizeGroup="MenuItemIGTColumnGroup"/>-->
                                        <!--<ColumnDefinition x:Name="Col3" Width="14"/>-->
                                    </Grid.ColumnDefinitions>
    
                                    <!-- ContentPresenter to show an Icon if needed -->
                                    <ContentPresenter Grid.Column="0" 
                                                      Margin="4,0,6,0" x:Name="Icon" 
                                                      VerticalAlignment="Center" ContentSource="Icon"/>
    
                                    <!-- Glyph is a checkmark if needed for a checkable menu -->
                                    <Grid Grid.Column="0" Visibility="Hidden" Margin="4,0,6,0" x:Name="GlyphPanel" VerticalAlignment="Center">
                                        <Path x:Name="GlyphPanelpath" VerticalAlignment="Center" Fill="{TemplateBinding Foreground}" 
                                              Data="M0,2 L0,4.8 L2.5,7.4 L7.1,2.8 L7.1,0 L2.5,4.6 z" FlowDirection="LeftToRight"/>
                                    </Grid>
    
                                    <!-- Content for the menu text etc -->
                                    <ContentPresenter Grid.Column="1"
                                              Margin="{TemplateBinding Padding}"
                                              x:Name="HeaderHost"
                                              RecognizesAccessKey="True"
                                              VerticalAlignment="Center"
                                              ContentSource="Header"/>
    
                                    <!-- Content for the menu IGT -->
                                    <ContentPresenter Grid.Column="2"
                                              Margin="8,1,8,1"
                                              x:Name="IGTHost"
                                              ContentSource="InputGestureText"
                                              VerticalAlignment="Center"/>
    
                                    <!-- Arrow drawn path which points to the next level of the menu -->
                                    <Grid Grid.Column="3" Margin="4,0,6,0" x:Name="ArrowPanel" VerticalAlignment="Center">
                                        <Path x:Name="ArrowPanelPath" HorizontalAlignment="Right" VerticalAlignment="Center" 
                                              Fill="{TemplateBinding Foreground}" Data="M0,0 L0,8 L4,4 z"/>
                                    </Grid>
    
                                    <!-- The Popup is the body of the menu which expands 
                                         down or across depending on the level of the item -->
                                    <Popup IsOpen="{Binding Path=IsSubmenuOpen, 
                                           RelativeSource ={RelativeSource TemplatedParent}}" 
                                           Placement="Right" x:Name="SubMenuPopup" Focusable="false" 
                                           PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
                                        <Border x:Name="SubMenuBorder" BorderBrush="{Binding Path=Foreground, 
                                            RelativeSource={RelativeSource AncestorType={x:Type Menu}}}" 
                                            BorderThickness="1" Padding="2,2,2,2">
                                            <Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
                                                <!-- StackPanel holds children of the menu. This is set by IsItemsHost=True  KeyboardNavigationMode = "Cycle" -->
                                                <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>   
                                            </Grid>
                                        </Border>
                                    </Popup>
                                </Grid>
                            </Border>
    
                            <!-- These triggers re-configure the four arrangements 
                                 of MenuItem to show different levels of menu via Role -->
                            <ControlTemplate.Triggers>
                                <!-- Role = TopLevelHeader : this is the root menu item in a menu; the Popup expands down -->
                                <Trigger Property="Role" Value="TopLevelHeader">
                                    <Setter Property="Padding" Value="6,1,6,1"/>
                                    <Setter Property="Placement" Value="Left" TargetName="SubMenuPopup"/>
                                    <!--<Setter Property="MinWidth" Value="0" TargetName="Col0"/>-->
                                    <!--<Setter Property="Width" Value="Auto" TargetName="Col3"/>-->
                                    <Setter Property="CornerRadius" Value="5,5,0,0" TargetName="Border"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="GlyphPanel"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="IGTHost"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
                                </Trigger>
    
                                <!-- Role = TopLevelItem :  this is a child menu item from the top level without any child items-->
                                <Trigger Property="Role" Value="TopLevelItem">
                                    <Setter Property="Padding" Value="6,1,6,1"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
                                </Trigger>
    
                                <!-- Role = SubMenuHeader : this is a child menu item which does not have children -->
                                <Trigger Property="Role" Value="SubmenuHeader">
                                    <Setter Property="DockPanel.Dock" Value="Top"/>
                                    <Setter Property="Padding" Value="0,2,0,2"/>
                                </Trigger>
    
                                <!-- Role = SubMenuItem : this is a child menu item which has children-->
                                <Trigger Property="Role" Value="SubmenuItem">
                                    <Setter Property="DockPanel.Dock" Value="Top"/>
                                    <Setter Property="Padding" Value="0,2,0,2"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
                                </Trigger>
                                <Trigger Property="IsSuspendingPopupAnimation" Value="true">
                                    <Setter Property="PopupAnimation" Value="None" TargetName="SubMenuPopup"/>
                                </Trigger>
    
                                <!-- If no Icon is present the we collapse the Icon Content -->
                                <Trigger Property="Icon" Value="{x:Null}">
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
                                </Trigger>
    
                                <!-- The GlyphPanel contains the CheckMark -->
                                <Trigger Property="IsChecked" Value="true">
                                    <Setter Property="Visibility" Value="Visible" TargetName="GlyphPanel"/>
                                    <Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
                                </Trigger>
    
                                <!-- Using the system colors for the Menu Highlight and IsEnabled-->
                                <Trigger Property="IsHighlighted" Value="true">
                                    <Setter Property="Background" Value="#ff0000" TargetName="Border"/>
                                    <Setter Property="Foreground" Value="#0036ff"/>
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter Property="Foreground" Value="#ff0000"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    
            <!--工具数据源-->
            <XmlDataProvider x:Key="toolsDS" Source="ConfigToolsTools.xml" XPath="Tools/Tool"></XmlDataProvider>
            <!--Tool模板-->
            <HierarchicalDataTemplate DataType="Tool" ItemsSource="{Binding XPath=Tool}" >
                <StackPanel Orientation="Horizontal">
                    <TextBlock Tag ="{Binding XPath=@Name}" Width="38">
                        <Image Source="{Binding XPath=@ImagePath}" Width="38" Height="38"></Image>
                    </TextBlock>
                </StackPanel>
            </HierarchicalDataTemplate>
            
            
            
        </Window.Resources>
        
        
    View Code

    2、Menu、MenuItem、 直接拷贝就可查看示例

        <Window.Resources>
    
            <!--Control colors.-->
            <Color x:Key="WindowColor">#FFE8EDF9</Color>
            <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
            <Color x:Key="ContentAreaColorDark">#FF7381F9</Color>
    
            <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
            <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
            <Color x:Key="DisabledForegroundColor">#FF888888</Color>
    
            <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
            <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>
    
            <Color x:Key="ControlLightColor">White</Color>
            <Color x:Key="ControlMediumColor">#FF7381F9</Color>
            <Color x:Key="ControlDarkColor">#FF211AA9</Color>
    
            <Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
            <Color x:Key="ControlPressedColor">#FF211AA9</Color>
    
    
            <Color x:Key="GlyphColor">#FF444444</Color>
            <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>
    
            <!--Border colors-->
            <Color x:Key="BorderLightColor">#FFCCCCCC</Color>
            <Color x:Key="BorderMediumColor">#FF888888</Color>
            <Color x:Key="BorderDarkColor">#FF444444</Color>
    
            <Color x:Key="PressedBorderLightColor">#FF888888</Color>
            <Color x:Key="PressedBorderDarkColor">#FF444444</Color>
    
            <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
            <Color x:Key="DisabledBorderDarkColor">#FF888888</Color>
    
            <Color x:Key="DefaultBorderBrushDarkColor">Black</Color>
    
            <!--Control-specific resources.-->
            <Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
            <Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
            <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>
    
            <Color x:Key="NavButtonFrameColor">#FF3843C4</Color>
    
            <LinearGradientBrush x:Key="MenuPopupBrush"
                         EndPoint="0.5,1"
                         StartPoint="0.5,0">
                <GradientStop Color="{DynamicResource ControlLightColor}"
                    Offset="0" />
                <GradientStop Color="{DynamicResource ControlMediumColor}"
                    Offset="0.5" />
                <GradientStop Color="{DynamicResource ControlLightColor}"
                    Offset="1" />
            </LinearGradientBrush>
    
            <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
                         StartPoint="0,0"
                         EndPoint="1,0">
                <LinearGradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="#000000FF"
                        Offset="0" />
                        <GradientStop Color="#600000FF"
                        Offset="0.4" />
                        <GradientStop Color="#600000FF"
                        Offset="0.6" />
                        <GradientStop Color="#000000FF"
                        Offset="1" />
                    </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
    
    
            <Style x:Key="{x:Type Menu}"
           TargetType="{x:Type Menu}">
                <Setter Property="OverridesDefaultStyle"
              Value="True" />
                <Setter Property="SnapsToDevicePixels"
              Value="True" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Menu}">
                            <Border BorderThickness="1">
                                <Border.BorderBrush>
                                    <LinearGradientBrush StartPoint="0,0"
                                     EndPoint="0,1">
                                        <LinearGradientBrush.GradientStops>
                                            <GradientStopCollection>
                                                <GradientStop Color="{DynamicResource BorderLightColor}"
                                    Offset="0.0" />
                                                <GradientStop Color="{DynamicResource BorderDarkColor}"
                                    Offset="1.0" />
                                            </GradientStopCollection>
                                        </LinearGradientBrush.GradientStops>
                                    </LinearGradientBrush>
    
                                </Border.BorderBrush>
                                <Border.Background>
                                    <LinearGradientBrush EndPoint="0.5,1"
                                     StartPoint="0.5,0">
                                        <GradientStop Color="{DynamicResource ControlLightColor}"
                                Offset="0" />
                                        <GradientStop Color="{DynamicResource ControlMediumColor}"
                                Offset="1" />
                                    </LinearGradientBrush>
                                </Border.Background>
                                <StackPanel ClipToBounds="True"
                          Orientation="Horizontal"
                          IsItemsHost="True" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    
            
            
            
           <Style x:Key="{x:Static MenuItem.SeparatorStyleKey}"
           TargetType="{x:Type Separator}">
      <Setter Property="Height"
              Value="1" />
      <Setter Property="Margin"
              Value="0,4,0,4" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type Separator}">
            <Border BorderThickness="1">
              <Border.BorderBrush>
                <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
              </Border.BorderBrush>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    
    
            <!--ScrollViewer for a MenuItem-->
            <MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter" />
    
            <Style x:Key="MenuScrollViewer"
           TargetType="{x:Type ScrollViewer}"
           BasedOn="{x:Null}">
                <Setter Property="HorizontalScrollBarVisibility"
              Value="Hidden" />
                <Setter Property="VerticalScrollBarVisibility"
              Value="Auto" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ScrollViewer}">
                            <Grid SnapsToDevicePixels="True">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto" />
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <Border Grid.Row="1"
                      Grid.Column="0">
                                    <ScrollContentPresenter Margin="{TemplateBinding Padding}" />
                                </Border>
    
                                <!--Style="{StaticResource MenuScrollButton}"-->
                                <RepeatButton 
                            Grid.Row="0"
                            Grid.Column="0"
                            Command="{x:Static ScrollBar.LineUpCommand}"
                            CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                            Focusable="False">
                                    <RepeatButton.Visibility>
                                        <MultiBinding FallbackValue="Visibility.Collapsed"
                                Converter="{StaticResource MenuScrollingVisibilityConverter}"
                                ConverterParameter="0">
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ComputedVerticalScrollBarVisibility" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="VerticalOffset" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ExtentHeight" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ViewportHeight" />
                                        </MultiBinding>
                                    </RepeatButton.Visibility>
                                    <!--<Path Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
                      Data="{StaticResource UpArrow}" />-->
                                </RepeatButton>
                                
                                <!--Style="{StaticResource MenuScrollButton}"-->
                                <RepeatButton 
                            Grid.Row="2"
                            Grid.Column="0"
                            Command="{x:Static ScrollBar.LineDownCommand}"
                            CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                            Focusable="False">
                                    <RepeatButton.Visibility>
                                        <MultiBinding FallbackValue="Visibility.Collapsed"
                                Converter="{StaticResource MenuScrollingVisibilityConverter}"
                                ConverterParameter="100">
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ComputedVerticalScrollBarVisibility" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="VerticalOffset" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ExtentHeight" />
                                            <Binding RelativeSource="{RelativeSource TemplatedParent}"
                             Path="ViewportHeight" />
                                        </MultiBinding>
                                    </RepeatButton.Visibility>
                                    <Path Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
                       />
                                    <!--Data="{StaticResource DownArrow}"-->
                                </RepeatButton>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    
    
    
            <!-- TopLevelHeader -->
    <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}"
                     TargetType="{x:Type MenuItem}">
      <Border x:Name="Border">
        <Grid>
          <ContentPresenter Margin="6,3,6,3"
                            ContentSource="Header"
                            RecognizesAccessKey="True" />
          <Popup x:Name="Popup"
                 Placement="Bottom"
                 IsOpen="{TemplateBinding IsSubmenuOpen}"
                 AllowsTransparency="True"
                 Focusable="False"
                 PopupAnimation="Fade">
            <Border x:Name="SubmenuBorder"
                    SnapsToDevicePixels="True"
                    BorderThickness="1"
                    Background="{DynamicResource MenuPopupBrush}">
              <Border.BorderBrush>
                <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
              </Border.BorderBrush>
              <ScrollViewer CanContentScroll="True"
                            Style="{StaticResource MenuScrollViewer}">
                <StackPanel IsItemsHost="True"
                            KeyboardNavigation.DirectionalNavigation="Cycle" />
              </ScrollViewer>
            </Border>
          </Popup>
        </Grid>
      </Border>
      <ControlTemplate.Triggers>
        <Trigger Property="IsSuspendingPopupAnimation"
                 Value="true">
          <Setter TargetName="Popup"
                  Property="PopupAnimation"
                  Value="None" />
        </Trigger>
        <Trigger Property="IsHighlighted"
                 Value="true">
          <Setter TargetName="Border"
                  Property="BorderBrush"
                  Value="Transparent" />
          <Setter Property="Background"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush StartPoint="0,0"
                                   EndPoint="0,1">
                <LinearGradientBrush.GradientStops>
                  <GradientStopCollection>
                    <GradientStop Color="{StaticResource ControlLightColor}" />
                    <GradientStop Color="{StaticResource ControlMouseOverColor}"
                                  Offset="1.0" />
                  </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
              </LinearGradientBrush>
    
            </Setter.Value>
          </Setter>
        </Trigger>
        <Trigger SourceName="Popup"
                 Property="AllowsTransparency"
                 Value="True">
          <Setter TargetName="SubmenuBorder"
                  Property="CornerRadius"
                  Value="0,0,4,4" />
          <Setter TargetName="SubmenuBorder"
                  Property="Padding"
                  Value="0,0,0,3" />
        </Trigger>
        <Trigger Property="IsEnabled"
                 Value="False">
          <Setter Property="Foreground">
            <Setter.Value>
              <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
            </Setter.Value>
          </Setter>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
    
    <!-- TopLevelItem -->
    <ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}"
                     TargetType="{x:Type MenuItem}">
      <Border x:Name="Border">
        <Grid>
          <ContentPresenter Margin="6,3,6,3"
                            ContentSource="Header"
                            RecognizesAccessKey="True" />
        </Grid>
      </Border>
      <ControlTemplate.Triggers>
        <Trigger Property="IsHighlighted"
                 Value="true">
          <Setter Property="Background"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush StartPoint="0,0"
                                   EndPoint="0,1">
                <LinearGradientBrush.GradientStops>
                  <GradientStopCollection>
                    <GradientStop Color="{StaticResource ControlLightColor}" />
                    <GradientStop Color="{StaticResource ControlMouseOverColor}"
                                  Offset="1.0" />
                  </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
              </LinearGradientBrush>
    
            </Setter.Value>
          </Setter>
        </Trigger>
        <Trigger Property="IsEnabled"
                 Value="False">
          <Setter Property="Foreground">
            <Setter.Value>
              <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
            </Setter.Value>
          </Setter>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
    
    <!-- SubmenuItem -->
    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}"
                     TargetType="{x:Type MenuItem}">
      <Border x:Name="Border"
              BorderThickness="1">
        <Grid>
          <Grid.ColumnDefinitions>
            <!--<ColumnDefinition Width="Auto"
                              SharedSizeGroup="Icon" />-->
            <ColumnDefinition Width="*" />
            <!--<ColumnDefinition Width="Auto"
                              SharedSizeGroup="Shortcut" />
            <ColumnDefinition Width="13" />-->
          </Grid.ColumnDefinitions>
          <ContentPresenter x:Name="Icon"
                            Margin="6,0,6,0"
                            VerticalAlignment="Center"
                            ContentSource="Icon" />
          <Border x:Name="Check"
                  Width="13"
                  Height="13"
                  Visibility="Collapsed"
                  Margin="6,0,6,0"
                  BorderThickness="1">
            <Border.BorderBrush>
              <LinearGradientBrush StartPoint="0,0"
                                   EndPoint="0,1">
                <LinearGradientBrush.GradientStops>
                  <GradientStopCollection>
                    <GradientStop Color="{DynamicResource BorderLightColor}"
                                  Offset="0.0" />
                    <GradientStop Color="{DynamicResource BorderDarkColor}"
                                  Offset="1.0" />
                  </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
              </LinearGradientBrush>
    
            </Border.BorderBrush>
            <Border.Background>
              <LinearGradientBrush StartPoint="0,0"
                                   EndPoint="0,1">
                <LinearGradientBrush.GradientStops>
                  <GradientStopCollection>
                    <GradientStop Color="{DynamicResource ControlLightColor}" />
                    <GradientStop Color="{DynamicResource ControlMediumColor}"
                                  Offset="1.0" />
                  </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
              </LinearGradientBrush>
            </Border.Background>
            <Path x:Name="CheckMark"
                  Width="7"
                  Height="7"
                  Visibility="Hidden"
                  SnapsToDevicePixels="False"
                  StrokeThickness="2"
                  Data="M 0 0 L 7 7 M 0 7 L 7 0">
              <Path.Stroke>
                <SolidColorBrush Color="{DynamicResource GlyphColor}" />
              </Path.Stroke>
            </Path>
          </Border>
          <ContentPresenter x:Name="HeaderHost"
                            Grid.Column="1"
                            ContentSource="Header"
                            RecognizesAccessKey="True" />
          <TextBlock x:Name="InputGestureText"
                     Grid.Column="2"
                     Text="{TemplateBinding InputGestureText}"
                     Margin="5,2,0,2"
                     DockPanel.Dock="Right" />
        </Grid>
      </Border>
      <ControlTemplate.Triggers>
        <Trigger Property="ButtonBase.Command"
                 Value="{x:Null}" />
        <Trigger Property="Icon"
                 Value="{x:Null}">
          <Setter TargetName="Icon"
                  Property="Visibility"
                  Value="Hidden" />
        </Trigger>
        <Trigger Property="IsChecked"
                 Value="true">
          <Setter TargetName="CheckMark"
                  Property="Visibility"
                  Value="Visible" />
        </Trigger>
        <Trigger Property="IsCheckable"
                 Value="true">
          <Setter TargetName="Check"
                  Property="Visibility"
                  Value="Visible" />
          <Setter TargetName="Icon"
                  Property="Visibility"
                  Value="Hidden" />
        </Trigger>
        <Trigger Property="IsHighlighted"
                 Value="true">
          <Setter Property="Background"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush EndPoint="0.5,1"
                                   StartPoint="0.5,0">
                <GradientStop Color="Transparent"
                              Offset="0" />
                <GradientStop Color="{DynamicResource ControlMouseOverColor}"
                              Offset="1" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
          <Setter Property="BorderBrush"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush EndPoint="0.5,1"
                                   StartPoint="0.5,0">
                <GradientStop Color="{DynamicResource BorderMediumColor}"
                              Offset="0" />
                <GradientStop Color="Transparent"
                              Offset="1" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
        </Trigger>
        <Trigger Property="IsEnabled"
                 Value="false">
          <Setter Property="Foreground">
            <Setter.Value>
              <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
            </Setter.Value>
          </Setter>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
    
    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}"
                     TargetType="{x:Type MenuItem}">
      <Border x:Name="Border"
              BorderThickness="1">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"
                              SharedSizeGroup="Icon" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto"
                              SharedSizeGroup="Shortcut" />
            <ColumnDefinition Width="13" />
          </Grid.ColumnDefinitions>
          <ContentPresenter x:Name="Icon"
                            Margin="6,0,6,0"
                            VerticalAlignment="Center"
                            ContentSource="Icon" />
          <ContentPresenter x:Name="HeaderHost"
                            Grid.Column="1"
                            ContentSource="Header"
                            RecognizesAccessKey="True" />
          <TextBlock x:Name="InputGestureText"
                     Grid.Column="2"
                     Text="{TemplateBinding InputGestureText}"
                     Margin="5,2,2,2"
                     DockPanel.Dock="Right" />
          <Path Grid.Column="3"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Data="M 0 0 L 0 7 L 4 3.5 Z">
            <Path.Fill>
              <SolidColorBrush Color="{DynamicResource GlyphColor}" />
            </Path.Fill>
          </Path>
          <Popup x:Name="Popup"
                 Placement="Right"
                 HorizontalOffset="-4"
                 IsOpen="{TemplateBinding IsSubmenuOpen}"
                 AllowsTransparency="True"
                 Focusable="False"
                 PopupAnimation="Fade">
            <Border x:Name="SubmenuBorder"
                    SnapsToDevicePixels="True"
                    Background="{DynamicResource MenuPopupBrush}"
                    BorderThickness="1">
              <Border.BorderBrush>
                <SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
              </Border.BorderBrush>
              <ScrollViewer CanContentScroll="True"
                            Style="{StaticResource MenuScrollViewer}">
                <StackPanel IsItemsHost="True"
                            KeyboardNavigation.DirectionalNavigation="Cycle" />
              </ScrollViewer>
            </Border>
          </Popup>
        </Grid>
      </Border>
      <ControlTemplate.Triggers>
        <Trigger Property="Icon"
                 Value="{x:Null}">
          <Setter TargetName="Icon"
                  Property="Visibility"
                  Value="Collapsed" />
        </Trigger>
        <Trigger Property="IsHighlighted"
                 Value="true">
          <Setter Property="Background"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush EndPoint="0.5,1"
                                   StartPoint="0.5,0">
                <GradientStop Color="Transparent"
                              Offset="0" />
                <GradientStop Color="{DynamicResource ControlMouseOverColor}"
                              Offset="1" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
          <Setter Property="BorderBrush"
                  TargetName="Border">
            <Setter.Value>
              <LinearGradientBrush EndPoint="0.5,1"
                                   StartPoint="0.5,0">
                <GradientStop Color="{DynamicResource BorderMediumColor}"
                              Offset="0" />
                <GradientStop Color="Transparent"
                              Offset="1" />
              </LinearGradientBrush>
            </Setter.Value>
          </Setter>
        </Trigger>
        <Trigger SourceName="Popup"
                 Property="AllowsTransparency"
                 Value="True">
          <Setter TargetName="SubmenuBorder"
                  Property="CornerRadius"
                  Value="4" />
          <Setter TargetName="SubmenuBorder"
                  Property="Padding"
                  Value="0,3,0,3" />
        </Trigger>
        <Trigger Property="IsEnabled"
                 Value="false">
          <Setter Property="Foreground">
            <Setter.Value>
              <SolidColorBrush Color="{StaticResource DisabledForegroundColor}" />
            </Setter.Value>
          </Setter>
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
    
    <!-- MenuItem Style -->
    <Style x:Key="{x:Type MenuItem}"
           TargetType="{x:Type MenuItem}">
      <Setter Property="OverridesDefaultStyle"
              Value="True" />
      <Style.Triggers>
        <Trigger Property="Role"
                 Value="TopLevelHeader">
          <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}" />
          <Setter Property="Grid.IsSharedSizeScope"
                  Value="true" />
        </Trigger>
        <Trigger Property="Role"
                 Value="TopLevelItem">
          <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.TopLevelItemTemplateKey}}" />
        </Trigger>
        <Trigger Property="Role"
                 Value="SubmenuHeader">
          <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}" />
        </Trigger>
        <Trigger Property="Role"
                 Value="SubmenuItem">
          <Setter Property="Template"
                  Value="{StaticResource {x:Static MenuItem.SubmenuItemTemplateKey}}" />
        </Trigger>
      </Style.Triggers>
    </Style>
    
    
    
    
    
            <XmlDataProvider x:Key="menudata" Source="ConfigToolsMenuData.xml" XPath="MenuData/Operation"></XmlDataProvider>
            <HierarchicalDataTemplate DataType="Operation"
                                      ItemsSource="{Binding XPath=Operation}">
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Text="{Binding XPath=@Name}" HorizontalAlignment="Left"></TextBlock>
                    <TextBlock Text="{Binding XPath=@Gesture}" HorizontalAlignment="Left"></TextBlock>
                </StackPanel>
    
            </HierarchicalDataTemplate>
        </Window.Resources>
    View Code
  • 相关阅读:
    C++中的关键概念:名字查找与继承
    调用哪个虚函数的问题
    二叉树基础知识
    赫夫曼树及其应用
    用MyEclipse搭建SSH框架 Struts Spring Hibernate
    数据库 事务的特性ACID
    网桥与交涣机
    Adobe Edge Animate 1.0 概述
    【官方】Adobe Edge Preview 3 初学者指南
    Adobe Edge , Flash 未来的方向?
  • 原文地址:https://www.cnblogs.com/shenchao/p/5411742.html
Copyright © 2020-2023  润新知