ControlTemplate in WPF —— Menu

来源:互联网 发布:网络儿童英语 编辑:程序博客网 时间:2024/06/02 03:40
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"                    mc:Ignorable="d">  <ResourceDictionary.MergedDictionaries>    <ResourceDictionary Source="Shared.xaml" />  </ResourceDictionary.MergedDictionaries>  <!-- SimpleStyles: Menu --><!--<SnippetMenu>-->      <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><!--</SnippetMenu>-->        <!--<SnippetContextMenu>-->  <Style TargetType="{x:Type ContextMenu}">    <Setter Property="SnapsToDevicePixels"            Value="True" />    <Setter Property="OverridesDefaultStyle"            Value="True" />    <Setter Property="Grid.IsSharedSizeScope"            Value="true" />    <Setter Property="HasDropShadow"            Value="True" />    <Setter Property="Template">      <Setter.Value>        <ControlTemplate TargetType="{x:Type ContextMenu}">          <Border x:Name="Border"                  Background="{StaticResource MenuPopupBrush}"                  BorderThickness="1">            <Border.BorderBrush>              <SolidColorBrush Color="{StaticResource BorderMediumColor}" />            </Border.BorderBrush>            <StackPanel IsItemsHost="True"                        KeyboardNavigation.DirectionalNavigation="Cycle" />          </Border>          <ControlTemplate.Triggers>            <Trigger Property="HasDropShadow"                     Value="true">              <Setter TargetName="Border"                      Property="Padding"                      Value="0,3,0,3" />              <Setter TargetName="Border"                      Property="CornerRadius"                      Value="4" />            </Trigger>          </ControlTemplate.Triggers>        </ControlTemplate>      </Setter.Value>    </Setter>  </Style>    <!--</SnippetContextMenu>-->  <MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter" />  <Geometry x:Key="DownArrow">M 0,0 L 3.5,4 L 7,0 Z</Geometry>  <Geometry x:Key="UpArrow">M 0,4 L 3.5,0 L 7,4 Z</Geometry>  <Geometry x:Key="RightArrow">M 0,0 L 4,3.5 L 0,7 Z</Geometry>  <Style x:Key="MenuScrollButton"         TargetType="{x:Type RepeatButton}"         BasedOn="{x:Null}">    <Setter Property="ClickMode"            Value="Hover" />    <Setter Property="MinWidth"            Value="0" />    <Setter Property="MinHeight"            Value="0" />    <Setter Property="Template">      <Setter.Value>        <ControlTemplate TargetType="{x:Type RepeatButton}">          <DockPanel Background="Transparent"                     SnapsToDevicePixels="true">            <Rectangle DockPanel.Dock="Right"                       x:Name="R1"                       Width="1"                       Fill="Transparent" />            <Rectangle DockPanel.Dock="Bottom"                       x:Name="B1"                       Height="1"                       Fill="Transparent" />            <Rectangle DockPanel.Dock="Left"                       x:Name="L1"                       Width="1"                       Fill="Transparent" />            <Rectangle DockPanel.Dock="Top"                       x:Name="T1"                       Height="1"                       Fill="Transparent" />            <ContentPresenter x:Name="ContentContainer"                              Margin="2,2,2,2"                              VerticalAlignment="Center"                              HorizontalAlignment="Center" />          </DockPanel>          <ControlTemplate.Triggers>            <Trigger Property="IsPressed"                     Value="true">              <Setter TargetName="R1"                      Property="Fill"                      Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" />              <Setter TargetName="B1"                      Property="Fill"                      Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" />              <Setter TargetName="L1"                      Property="Fill"                      Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" />              <Setter TargetName="T1"                      Property="Fill"                      Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" />              <Setter TargetName="ContentContainer"                      Property="Margin"                      Value="3,3,1,1" />            </Trigger>          </ControlTemplate.Triggers>        </ControlTemplate>      </Setter.Value>    </Setter>  </Style>  <!--ScrollViewer for a MenuItem-->  <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>        <!--<SnippetMenuScrollViewer>-->        <!--ScrollViewer for a MenuItem-->        <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>            <RepeatButton Style="{StaticResource MenuScrollButton}"                          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>            <RepeatButton Style="{StaticResource MenuScrollButton}"                          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>        <!--</SnippetMenuScrollViewer>-->      </Setter.Value>    </Setter>  </Style>  <!--<SnippetMenuItem>-->    <!--<Snippet9>-->  <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>    <!--</Snippet9>-->  <!-- 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>      <!--<SnippetTriggerSourceName>-->      <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>      <!--</SnippetTriggerSourceName>-->      <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>  <!--</SnippetMenuItem>--></ResourceDictionary>

原创粉丝点击