Partilhar via


Visão geral do menu

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

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

Criação de Menus

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

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

Os atalhos de teclado são combinações de caracteres que podem ser digitadas com o teclado para invocar comandos Menu. Por exemplo, o atalho para Copy é 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 coloca apenas o atalho de teclado no item de menu. Ele não associa o comando com o 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 Open e Save com controles MenuItem. A propriedade command não apenas associa um comando a um MenuItem, mas também fornece o texto do gesto de entrada para usar como 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 onde o comando ocorre. Se CommandTarget não estiver definido, o elemento que tem o foco do teclado receberá o comando. Para obter mais informações sobre comandos, consulte Visão geral de comandos.

Com o estilo de controle, você pode alterar drasticamente a aparência e o comportamento de Menu controles sem ter que escrever um controle personalizado. Além de definir propriedades visuais, você também pode aplicar um Style a partes individuais de um controle, alterar o comportamento de partes do controle por meio de propriedades, 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 a cor de fundo do menu e o MenuTextBrush como a cor de primeiro plano do menu. Observe que você usa chaves de recursos para atribuir os pincéis.

<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 alterar a aparência de um MenuItem em resposta a eventos que ocorrem no Menu. Quando você move o mouse sobre o Menu, a cor do 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>

Ver também