Estilos y plantillas de ContextMenuContextMenu Styles and Templates

En este tema se describe los estilos y plantillas para el ContextMenu control.This topic describes the styles and templates for the ContextMenu control. Puede modificar el valor predeterminado ControlTemplate para proporcionar el control una apariencia única.You can modify the default ControlTemplate to give the control a unique appearance. Para más información, consulte Personalización de la apariencia de un control existente mediante la creación de una clase ControlTemplate.For more information, see Customizing the Appearance of an Existing Control by Creating a ControlTemplate.

Elementos ContextMenuContextMenu Parts

El ContextMenu control no tiene elementos con nombre.The ContextMenu control does not have any named parts.

Cuando creas un ControlTemplate para un ContextMenu, la plantilla podría contener un ItemsPresenter dentro de un ScrollViewer.When you create a ControlTemplate for a ContextMenu, your template might contain an ItemsPresenter within a ScrollViewer. (El ItemsPresenter muestra cada elemento en el ContextMenu; el ScrollViewer habilita el desplazamiento dentro del control).(The ItemsPresenter displays each item in the ContextMenu; the ScrollViewer enables scrolling within the control). Si el ItemsPresenter no es el elemento secundario directo de la ScrollViewer, debe proporcionar el ItemsPresenter el nombre, ItemsPresenter.If the ItemsPresenter is not the direct child of the ScrollViewer, you must give the ItemsPresenter the name, ItemsPresenter.

Estados de ContextMenuContextMenu States

En la tabla siguiente se enumera los estados visuales para el ContextMenu control.The following table lists the visual states for the ContextMenu control.

Nombre de VisualStateVisualState Name Nombre de VisualStateGroupVisualStateGroup Name DescripciónDescription
VálidoValid ValidationStatesValidationStates El control utiliza el Validation clase y el HasError propiedad adjunta es false.The control uses the Validation class and the HasError attached property is false.
InvalidFocusedInvalidFocused ValidationStatesValidationStates El HasError propiedad adjunta es true tiene el control tiene el foco.The HasError attached property is true has the control has focus.
InvalidUnfocusedInvalidUnfocused ValidationStatesValidationStates El HasError propiedad adjunta es true tiene el control no tiene el foco.The HasError attached property is true has the control does not have focus.

Ejemplo de ControlTemplate de ContextMenuContextMenu ControlTemplate Example

El ejemplo siguiente muestra cómo definir un ControlTemplate para el ContextMenu control.The following example shows how to define a ControlTemplate for the ContextMenu control.

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

El ControlTemplate usa los siguientes recursos.The ControlTemplate uses the following 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>

Para ver un ejemplo completo, consulte Aplicación de estilos con el ejemplo ControlTemplates.For the complete sample, see Styling with ControlTemplates Sample.

Vea tambiénSee also