ControlTemplate in WPF —— Menu

<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>

 

posted @ 2017-08-22 10:55  天王星天  阅读(364)  评论(0编辑  收藏  举报