MenuFlyout Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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.
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:
- FlyoutBase.AttachedFlyout: uma propriedade anexada que associa um MenuFlyout a um elemento de interface do usuário específico (pode ser qualquer classe derivada de FrameworkElement ).
- ShowAttachedFlyout: um método estático que pode determinar se um submenu já está associado a um elemento de interface do usuário por meio de um uso de FlyoutBase.AttachedFlyout . Nesse caso, o método chama ShowAt internamente, usando o FrameworkElement especificado.
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) |