Compartir a través de


Información general sobre menús

Actualización: noviembre 2007

La clase Menu permite organizar los elementos asociados a los comandos y controladores de eventos por orden jerárquico. Cada elemento Menu contiene una colección de elementos MenuItem.

Este tema contiene las secciones siguientes.

  • Control Menu
  • Crear menús
  • Elementos de menú con métodos abreviados de teclado
  • Estilos de menús
  • Temas relacionados

Control Menu

El control Menu presenta una lista de elementos que especifican comandos u opciones para una aplicación. Normalmente, al hacer clic en un elemento MenuItem, se abre un submenú o una aplicación a fin de ejecutar un comando.

Crear menús

En el ejemplo siguiente se crea un objeto Menu para manipular texto en un control TextBox. Menu contiene objetos MenuItem que utilizan las propiedades Command, IsCheckable y Header, y los eventos Checked, Unchecked y Click.

<Menu>
  <MenuItem Header="_Edit">
    <MenuItem Command="ApplicationCommands.Copy"/>
    <MenuItem Command="ApplicationCommands.Cut"/>
    <MenuItem Command="ApplicationCommands.Paste"/>
  </MenuItem>
  <MenuItem Header="_Font">
    <MenuItem Header="_Bold" IsCheckable="True"
              Checked="Bold_Checked"
              Unchecked="Bold_Unchecked"/>
    <MenuItem Header="_Italic" IsCheckable="True"
              Checked="Italic_Checked"
              Unchecked="Italic_Unchecked"/>
    <Separator/>
    <MenuItem Header="I_ncrease Font Size"
              Click="IncreaseFont_Click"/>
    <MenuItem Header="_Decrease Font Size"
              Click="DecreaseFont_Click"/>
  </MenuItem>
</Menu>
<TextBox Name="textBox1" TextWrapping="Wrap"
         Margin="2">
  The quick brown fox jumps over the lazy dog.
</TextBox>
Private Sub Bold_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Bold
End Sub

Private Sub Bold_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontWeight = FontWeights.Normal
End Sub

Private Sub Italic_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Italic
End Sub

Private Sub Italic_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    textBox1.FontStyle = FontStyles.Normal
End Sub

Private Sub IncreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize < 18 Then
        textBox1.FontSize += 2
    End If
End Sub

Private Sub DecreaseFont_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If textBox1.FontSize > 10 Then
        textBox1.FontSize -= 2
    End If
End Sub
private void Bold_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Bold;
}

private void Bold_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontWeight = FontWeights.Normal;
}

private void Italic_Checked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Italic;
}

private void Italic_Unchecked(object sender, RoutedEventArgs e)
{
    textBox1.FontStyle = FontStyles.Normal;
}

private void IncreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize < 18)
    {
        textBox1.FontSize += 2;
    }
}

private void DecreaseFont_Click(object sender, RoutedEventArgs e)
{
    if (textBox1.FontSize > 10)
    {
        textBox1.FontSize -= 2;
    }
}

Elementos de menú con métodos abreviados de teclado

Los métodos abreviados de teclado son combinaciones de caracteres que se pueden escribir con el teclado para invocar los comandos de Menu. Por ejemplo, el método abreviado para Copiar es CTRL+C. Hay dos propiedades que se utilizan con los métodos abreviados de teclado y los elementos de menú: InputGestureText o Command.

InputGestureText

En el ejemplo siguiente se muestra cómo utilizar la propiedad InputGestureText para asignar texto del método abreviado de teclado a los controles MenuItem. Esta propiedad únicamente pone el método abreviado de teclado en el elemento de menú. No asocia el comando a MenuItem. La aplicación debe administrar los datos proporcionados por el usuario para llevar a cabo la acción.

<MenuItem Header="_Cut" InputGestureText="Ctrl+X"/>
<MenuItem Header="_Find" InputGestureText="Ctrl+F"/>

Command

En el ejemplo siguiente se muestra cómo utilizar la propiedad Command para asociar los comandos Abrir y Guardar a controles MenuItem. La propiedad Command no sólo asocia un comando a un control MenuItem, sino que también proporciona el texto del movimiento de entrada que se utilizará como método abreviado.

<MenuItem Header="_Open" Command="ApplicationCommands.Open"/>
<MenuItem Header="_Save" Command="ApplicationCommands.Save"/>

La clase MenuItem también tiene una propiedad CommandTarget, que especifica el elemento donde se produce el comando. Si CommandTarget no se establece, el elemento que tiene el foco de teclado recibe el comando. Para obtener más información sobre comandos, consulte Información general sobre comandos.

Estilos de menús

Gracias a los estilos de controles, puede cambiar de manera drástica el aspecto y el comportamiento de los controles Menu sin tener que escribir un control personalizado. Además de establecer las propiedades visuales, puede aplicar Style a los elementos individuales de un control, cambiar el comportamiento de algunos elementos del control mediante propiedades, agregar elementos adicionales o cambiar el diseño de un control. En el ejemplo siguiente se muestran varias maneras de agregar un Style a un control Menu.

En el primer ejemplo de código se define un Style denominado Simple que muestra cómo utilizar la configuración actual del sistema en el estilo. En el código se asigna el color de MenuHighlightBrush como color de fondo del menú y MenuTextBrush como color de primer plano del menú. Observe que se utilizan claves de recurso para asignar los pinceles.

<Style x:Key="Simple" TargetType="{x:Type MenuItem}">
  <Setter Property = "Background" Value= "{DynamicResource {x:Static SystemColors.MenuHighlightBrushKey}}"/>
  <Setter Property = "Foreground" Value= "{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"/>
  <Setter Property = "Height" Value= "{DynamicResource {x:Static SystemParameters.CaptionHeightKey}}"/>
</Style>

En el ejemplo siguiente se utilizan elementos Trigger que permiten cambiar el aspecto de MenuItem en respuesta a los eventos que se producen en Menu. Al mover el mouse sobre Menu, el color de primer plano y las características de la fuente de los elementos de menú cambian.

<Style x:Key="Triggers" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="MenuItem.IsMouseOver" Value="true">
      <Setter Property = "Foreground" Value="Red"/>
      <Setter Property = "FontSize" Value="16"/>
      <Setter Property = "FontStyle" Value="Italic"/>
    </Trigger>
  </Style.Triggers>
</Style>

Vea también

Tareas

Ejemplo WPF Controls Gallery