Compartilhar via


Visão geral sobre Menu

A classe Menu permite que você organize elementos associados com comandos e manipuladores de eventos em uma ordem hierárquica. Cada elemento Menu contém uma coleção de MenuItem.

Este tópico contém as seguintes seções.

  • Controle Menu
  • Criando menus
  • MenuItems com atalhos de teclado
  • Estilizando Menus
  • Tópicos relacionados

Controle Menu

O controle Menu apresenta uma lista de itens que especificam comandos ou opções para um aplicativo. Geralmente, clicar em um MenuItem abre um submenu ou faz com que um aplicativo execute um comando.

Criando menus

O exemplo a seguir cria um Menu para manipular texto em um TextBox. O Menu contém objetos MenuItem que usam as propriedades Command, IsCheckable, e Header e os eventos Checked, Unchecked, e 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;
    }
}

Atalhos de teclado são combinações de caracteres que podem ser inseridas com o teclado para chamar comandos de Menu. Por exemplo, o atalho para Cópia é CTRL+C. Há duas propriedades para usar com atalhos de teclado e itens de menu — InputGestureText ou Command.

InputGestureText

O exemplo a seguir mostra como usar a propriedade InputGestureText para atribuir texto de atalho de teclado a controles MenuItem. Isso somente coloca o atalho de teclado no item de menu. Ele não associa o comando ao MenuItem. O aplicativo deve manipular a entrada do usuário para executar a ação.

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

Comando

O exemplo a seguir mostra como usar a propriedade Command para associar os comandos Abrir e Salvar aos controles MenuItem. Não apenas a propriedade de comando associa um comando a um MenuItem, mas ela também fornece o gesto de entrada de texto a ser usado como um atalho.

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

A classe MenuItem também tem uma propriedade CommandTarget, que especifica o elemento no qual o comando ocorre. Se CommandTarget não estiver definido, o elemento que tenha o foco do teclado recebe o comando. Para obter mais informações sobre comandos, consulte Visão geral de Comando.

Estilizando Menus

Com estilo de controle, você pode alterar consideravelmente a aparência e o comportamento de controles Menu sem precisar escrever um controle personalizado. Além disso, para definir propriedades visuais, você pode também aplicar um Style a partes individuais de um controle, alterar o comportamento das partes do controle através das propriedades, ou adicionar partes adicionais ou alterar o layout de um controle. Os exemplos a seguir demonstram várias maneiras de adicionar um Style a um controle Menu.

O primeiro exemplo de código define um Style chamado Simple que mostra como usar as configurações atuais do sistema no seu estilo. O código atribui a cor do MenuHighlightBrush como cor do plano de fundo do menu e o MenuTextBrush como cor de primeiro plano do menu. Observe que você usa chaves de recurso para atribuir os brushes.

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

O exemplo a seguir usa elementos Trigger que permitem que você altere a aparência de um MenuItem em resposta a eventos que ocorrem no Menu. Quando você move o mouse sobre o Menu, a cor de primeiro plano e as características da fonte dos itens de menu mudam.

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

Consulte também

Tarefas

Exemplo de galeria de controles do WPF