Partilhar via


MenuFlyout Classe

Definição

Representa um submenu que exibe um menu de comandos.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
class MenuFlyout : FlyoutBase
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Items")]
public class MenuFlyout : FlyoutBase
Public Class MenuFlyout
Inherits FlyoutBase
<MenuFlyout>
  oneOrMoreItems
</MenuFlyout>
Herança
Object IInspectable DependencyObject FlyoutBase MenuFlyout
Derivado
Atributos

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)

Exemplos

Dica

Para obter mais informações, diretrizes de design e exemplos de código, consulte Menus e menus de contexto.

Se você tiver o aplicativo WinUI 2 Gallery instalado, clique aqui para abrir o aplicativo e ver o MenuFlyout em ação.

Este exemplo cria uma classe MenuFlyout e usa a propriedade ContextFlyout, uma propriedade disponível para a maioria dos controles, para mostrar a classe MenuFlyout como menu de contexto.

<Rectangle Height="100" Width="100">
  <Rectangle.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </Rectangle.ContextFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

O próximo exemplo é praticamente idêntico, mas em vez de usar a propriedade ContextFlyout para mostrar a classe MenuFlyout como menu de contexto, o exemplo usa a propriedade Showattachedflyout para mostrá-la como menu.

<Rectangle
  Height="100" Width="100"
  Tapped="Rectangle_Tapped">
  <FlyoutBase.AttachedFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="Change color" Click="ChangeColorItem_Click" />
    </MenuFlyout>
  </FlyoutBase.AttachedFlyout>
  <Rectangle.Fill>
    <SolidColorBrush x:Name="rectangleFill" Color="Red" />
  </Rectangle.Fill>
</Rectangle>
private void Rectangle_Tapped(object sender, TappedRoutedEventArgs e)
{
    FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}

private void ChangeColorItem_Click(object sender, RoutedEventArgs e)
{
    // Change the color from red to blue or blue to red.
    if (rectangleFill.Color == Windows.UI.Colors.Red)
    {
        rectangleFill.Color = Windows.UI.Colors.Blue;
    }
    else
    {
        rectangleFill.Color = Windows.UI.Colors.Red;
    }
}

Este exemplo mostra como você pode adicionar e remover itens de menu em runtime com base na alteração das condições em seu aplicativo.

<StackPanel Margin="40" Width="220">
    <Rectangle x:Name="Rect1" Height="100" Width="200" 
               Stroke="Black" StrokeThickness="1" Fill="White">
        <Rectangle.ContextFlyout>
            <MenuFlyout x:Name="RectangleColorMenu"/>
        </Rectangle.ContextFlyout>
    </Rectangle>

    <StackPanel>
        <TextBlock TextWrapping="WrapWholeWords"
                   Text="Check colors to include in the menu, then choose a color from the context menu on the rectangle."/>
        <CheckBox Content="Blue" Click="CheckBox_Click" Tag="blue"/>
        <CheckBox Content="Green" Click="CheckBox_Click" Tag="green"/>
        <CheckBox Content="Red" Click="CheckBox_Click" Tag="red"/>
        <CheckBox Content="Yellow" Click="CheckBox_Click" Tag="yellow"/>
    </StackPanel>
</StackPanel>
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // Using the Tag property lets you localize the display name
    // without affecting functionality.
    var cb = (CheckBox)sender;
    if (cb.IsChecked == true)
    {
        AddMenuItem(cb.Tag.ToString(), cb.Content.ToString());
    }
    else
    {
        RemoveMenuItem(cb.Content.ToString());
    }
}

private void AddMenuItem(string colorString, string locColorName)
{
    // Set the color.
    Color newColor = Colors.Blue;
    if (colorString == "green")
        newColor = Colors.Green;
    else if (colorString == "red")
        newColor = Colors.Red;
    else if (colorString == "yellow")
        newColor = Colors.Yellow;

    // Create the menu item.
    var newMenuItem = new MenuFlyoutItem();
    newMenuItem.Text = locColorName;
    newMenuItem.Click += (s, e1) =>
    {
        Rect1.Fill = new SolidColorBrush(newColor);
    };

    // Add the item to the menu.
    RectangleColorMenu.Items.Add(newMenuItem);

    // Sort the menu so it's always consistent.
    var orderedItems =  RectangleColorMenu.Items.OrderBy(i => ((MenuFlyoutItem)i).Text).ToList();
    RectangleColorMenu.Items.Clear();
    foreach (var item in orderedItems)
    {
        RectangleColorMenu.Items.Add(item);
    }
}

private void RemoveMenuItem(string locColorName)
{
    // Get any menu items to remove and remove them.
    var items = RectangleColorMenu.Items.Where(i => ((MenuFlyoutItem)i).Text == locColorName);
    foreach (MenuFlyoutItem item in items)
    {
        RectangleColorMenu.Items.Remove(item);
    }
}

Comentários

Dica

Para obter mais informações, diretrizes de design e exemplos de código, consulte Menus e menus de contexto.

O MenuFlyout exibe temporariamente uma lista de comandos ou opções relacionadas ao que o usuário está fazendo no momento.

Controle de submenu de menu

Use um controle Flyout para exibir itens únicos e um controle MenuFlyout para mostrar um menu de itens. Para obter mais informações, consulte Menus e menus de contexto.

Um controle MenuFlyout pode ser usado como o valor da propriedade Button.Flyout . Isso geralmente é definido em XAML como parte de uma definição de interface do usuário da página. Button é o único controle que tem uma propriedade Flyout dedicada. Quando definido como Button.Flyout, o MenuFlyout é exibido quando o botão é tocado ou invocado de outra forma.

Para associar um MenuFlyout a outros controles, use a propriedade ContextFlyout que está disponível em qualquer UIElement.

Anotações para versões anteriores

Observação

A propriedade ContextFlyout não está disponível antes da Atualização de Aniversário do Windows 10 (SDK versão 14393). Para versões anteriores, use a propriedade anexada FlyoutBase.AttachedFlyout .

Você pode usar a propriedade anexada FlyoutBase.AttachedFlyout para associar um MenuFlyout a outros controles. Quando um MenuFlyout é atribuído a outros elementos de interface do usuário usando FlyoutBase.AttachedFlyout, você deve chamar o método ShowAt ou o método ShowAttachedFlyout estático para exibir o submenu.

Além dos membros listados acima, há outros membros da classe base FlyoutBase que geralmente são usados em cenários típicos de MenuFlyout:

Estilo e modelo de controle

Você pode modificar o Estilo e ControlTemplate padrão para dar ao controle uma aparência exclusiva. Para obter informações sobre como modificar o estilo e o modelo de um controle, consulte Controles de estilo. O estilo, o modelo e os recursos padrão que definem a aparência do controle são incluídos no generic.xaml arquivo. Para fins de design, generic.xaml está disponível localmente com a instalação do pacote SDK ou NuGet.

  • Estilos winui (recomendado): Para ver os estilos atualizados do WinUI, consulte \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml.
  • Estilos não WinUI: Para estilos internos, consulte %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml.

Os locais podem ser diferentes se você personalizou a instalação. Estilos e recursos de diferentes versões do SDK podem ter valores diferentes.

O XAML também inclui recursos que você pode usar para modificar as cores de um controle em diferentes estados visuais sem modificar o modelo de controle. É preferível modificar esses recursos para definir propriedades como Plano de Fundo e Primeiro Plano. Para obter mais informações, consulte a seção Estilo leve do artigo Estilos XAML . Recursos de estilo leve estão disponíveis a partir de Windows 10, versão 1607 (SDK 14393).

Histórico de versão

Versão do Windows Versão do SDK Valor adicionado
1809 17763 ShowAt

Construtores

MenuFlyout()

Inicializa uma nova instância da classe MenuFlyout .

Propriedades

AllowFocusOnInteraction

Obtém ou define um valor que indica se o elemento obtém automaticamente o foco quando o usuário interage com ele.

(Herdado de FlyoutBase)
AllowFocusWhenDisabled

Obtém ou define um valor que especifica se o controle pode receber foco quando está desabilitado.

(Herdado de FlyoutBase)
AreOpenCloseAnimationsEnabled

Obtém ou define um valor que indica se as animações são reproduzidas quando o submenu é aberto ou fechado.

(Herdado de FlyoutBase)
Dispatcher

Obtém o CoreDispatcher ao qual esse objeto está associado. O CoreDispatcher representa uma instalação que pode acessar DependencyObject no thread da interface do usuário mesmo que o código seja iniciado por um thread que não seja da interface do usuário.

(Herdado de DependencyObject)
ElementSoundMode

Obtém ou define um valor que especifica a preferência do controle para se ele reproduz sons.

(Herdado de FlyoutBase)
InputDevicePrefersPrimaryCommands

Obtém um valor que indica se o dispositivo de entrada usado para abrir o submenu não abre facilmente os comandos secundários.

(Herdado de FlyoutBase)
IsConstrainedToRootBounds

Obtém um valor que indica se o submenu é mostrado dentro dos limites da raiz XAML.

(Herdado de FlyoutBase)
IsOpen

Obtém um valor que indica se o submenu está aberto.

(Herdado de FlyoutBase)
Items

Obtém a coleção usada para gerar o conteúdo do menu.

LightDismissOverlayMode

Obtém ou define um valor que especifica se a área fora de uma interface do usuário de descarte claro está escurecida.

(Herdado de FlyoutBase)
MenuFlyoutPresenterStyle

Obtém ou define o estilo usado ao renderizar o MenuFlyout.

MenuFlyoutPresenterStyleProperty

Identifica a propriedade de dependência MenuFlyoutPresenterStyle .

OverlayInputPassThroughElement

Obtém ou define um elemento que deve receber eventos de entrada de ponteiro mesmo quando estiver abaixo da sobreposição do submenu.

(Herdado de FlyoutBase)
Placement

Obtém ou define o posicionamento padrão a ser usado para o submenu, em relação ao seu destino de posicionamento.

(Herdado de FlyoutBase)
ShouldConstrainToRootBounds

Obtém ou define um valor que indica se o submenu deve ser mostrado dentro dos limites da raiz XAML.

(Herdado de FlyoutBase)
ShowMode

Obtém ou define um valor que indica como um submenu se comporta quando mostrado.

(Herdado de FlyoutBase)
Target

Obtém o elemento a ser usado como o destino de posicionamento do submenu.

(Herdado de FlyoutBase)
XamlRoot

Obtém ou define o XamlRoot no qual esse submenu está sendo exibido.

(Herdado de FlyoutBase)

Métodos

ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade de dependência.

(Herdado de DependencyObject)
CreatePresenter()

Quando substituído em uma classe derivada, inicializa um controle para mostrar o conteúdo do submenu conforme apropriado para o controle derivado. Observação: esse método não tem implementação de classe base e deve ser substituído em uma classe derivada.

(Herdado de FlyoutBase)
GetAnimationBaseValue(DependencyProperty)

Retorna qualquer valor base estabelecido para uma propriedade de dependência, que se aplicaria nos casos em que uma animação não está ativa.

(Herdado de DependencyObject)
GetValue(DependencyProperty)

Retorna o valor efetivo atual de uma propriedade de dependência de um DependencyObject.

(Herdado de DependencyObject)
Hide()

Fecha o submenu.

(Herdado de FlyoutBase)
OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs)

Chamado pouco antes de um atalho de teclado (acelerador) ser processado em seu aplicativo. Invocado sempre que o código do aplicativo ou processos internos chamam ProcessKeyboardAccelerators. Substitua esse método para influenciar a manipulação do acelerador padrão.

(Herdado de FlyoutBase)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, se um valor local for definido.

(Herdado de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra uma função de notificação para escutar alterações em uma DependencyProperty específica nesta instância dependencyObject .

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência em um DependencyObject.

(Herdado de DependencyObject)
ShowAt(DependencyObject, FlyoutShowOptions)

Mostra o submenu colocado em relação ao elemento especificado usando as opções especificadas.

(Herdado de FlyoutBase)
ShowAt(FrameworkElement)

Mostra o submenu colocado em relação ao elemento especificado.

(Herdado de FlyoutBase)
ShowAt(UIElement, Point)

Mostra o submenu colocado no deslocamento especificado em relação ao elemento de destino especificado.

TryInvokeKeyboardAccelerator(ProcessKeyboardAcceleratorEventArgs)

Tenta invocar um atalho de teclado (acelerador).

(Herdado de FlyoutBase)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Cancela uma notificação de alteração que foi registrada anteriormente chamando RegisterPropertyChangedCallback.

(Herdado de DependencyObject)

Eventos

Closed

Ocorre quando o submenu está oculto.

(Herdado de FlyoutBase)
Closing

Ocorre quando o submenu começa a ficar oculto.

(Herdado de FlyoutBase)
Opened

Ocorre quando o submenu é mostrado.

(Herdado de FlyoutBase)
Opening

Ocorre antes que o submenu seja mostrado.

(Herdado de FlyoutBase)

Aplica-se a

Confira também