Cardápio

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

Captura de ecrã que mostra um controlo de menu com múltiplos itens de menu.

Estilos e modelos

Podes modificar o padrão ControlTemplate para dar ao Menu controlo uma aparência única. Para mais informações, veja O que são estilos e modelos? e Como criar um modelo para um controlo.

Propriedade de conteúdo

O Menu controlo utiliza a Items propriedade como sua propriedade de conteúdo. Esta propriedade permite preencher o Menu com uma coleção de MenuItem elementos com os quais os utilizadores podem interagir.

Partes

O Menu controlo não tem quaisquer partes nomeadas.

Quando cria um ControlTemplate para um Menu, o seu modelo pode conter um ItemsPresenter dentro de um ScrollViewer. O ItemsPresenter mostra cada item no Menu; o ScrollViewer permite fazer scroll dentro do controlo. Se o ItemsPresenter não for filho direto do ScrollViewer, deve dar ao ItemsPresenter o nome ItemsPresenter.

Estados visuais

A tabela seguinte lista os estados visuais do Menu controlo.

Nome VisualState Nome VisualStateGroup Description
Válido Estados de Validação O controlo usa a Validation classe e a Validation.HasError propriedade associada é false.
FocadoInválido Estados de Validação A Validation.HasError propriedade anexa indica se o controlo tem foco.
InvalidUnfocused Estados de Validação A Validation.HasError propriedade anexa tem true o controlo que não tem foco.

Conceitos-chave

Os conceitos seguintes são importantes ao trabalhar com o Menu controlador.

Os atalhos de teclado são combinações de caracteres que podem ser introduzidas com o teclado para invocar Menu comandos. Por exemplo, o atalho para Copiar é CTRL+C. Existem duas propriedades para usar com atalhos de teclado e itens de menu —InputGestureText ou Command.

InputGestureText

Usa a InputGestureText propriedade para atribuir atalhos de texto de teclado aos MenuItem controlos. Isto só coloca o atalho de teclado no item do menu. Não associa o comando ao MenuItem. A aplicação deve gerir a entrada do utilizador para executar a ação.

Command

Use a propriedade Command para associar comandos como Abrir e Guardar com controlos MenuItem. A propriedade de comando não só associa um comando a um MenuItem, como também fornece o texto do gesto de entrada para usar como atalho.

A MenuItem classe também tem uma CommandTarget propriedade que especifica o elemento onde o comando ocorre. Se CommandTarget não estiver definido, o elemento que tem foco no teclado recebe o comando. Para mais informações sobre comandos, consulte Visão Geral dos Comandos.

Examples

Os exemplos seguintes demonstram como usar o Menu controlo em diferentes cenários.

Criação de menus

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

O exemplo seguinte cria um Menu para manipular texto num TextBox. O Menu contém MenuItem objetos que usam as Command, IsCheckable, e Header propriedades e os Checked, Unchecked, e Click eventos.

<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

Usar o InputGestureText com os MenuItems

O exemplo seguinte mostra como usar a InputGestureText propriedade para atribuir texto de atalhos de teclado aos MenuItem controlos:

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

Usar a propriedade Command com MenuItems

O exemplo seguinte mostra como usar a Command propriedade para associar os comandos Open e Save aos MenuItem controlos:

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

Consulte também