Compartir a través de


MenuFlyout Clase

Definición

Representa un control flotante que muestra un menú 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>
Herencia
Object IInspectable DependencyObject FlyoutBase MenuFlyout
Derivado
Atributos

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)

Ejemplos

Sugerencia

Para obtener más información, instrucciones de diseño y ejemplos de código, consulta Menús y menús contextuales.

Si tienes instalada la aplicación WinUI 2 Gallery , haz clic aquí para abrir la aplicación y ver MenuFlyout en acción.

En este ejemplo se crea una clase MenuFlyout y se usa la propiedad ContextFlyout, una propiedad disponible para la mayoría de los controles, para mostrar la clase MenuFlyout como un menú contextual.

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

El siguiente ejemplo es casi idéntico, pero en lugar de usar la propiedad ContextFlyout para mostrar la clase MenuFlyout como un menú contextual, el ejemplo usa la propiedad FlyoutBase.ShowAttachedFlyout para que se muestre como un menú.

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

En este ejemplo se muestra cómo agregar y quitar elementos de menú en tiempo de ejecución en función de las condiciones cambiantes de la aplicación.

<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);
    }
}

Comentarios

Sugerencia

Para obtener más información, instrucciones de diseño y ejemplos de código, consulta Menús y menús contextuales.

MenuFlyout muestra temporalmente una lista de comandos o opciones relacionados con lo que el usuario está haciendo actualmente.

Control de control flotante de menú

Usa un control Flyout para mostrar elementos individuales y un control MenuFlyout para mostrar un menú de elementos. Para obtener más información, consulta Menús y menús contextuales.

Se puede usar un control MenuFlyout como valor de la propiedad Button.Flyout . Normalmente, esto se establece en XAML como parte de una definición de interfaz de usuario de la página. Button es el único control que tiene una propiedad Flyout dedicada. Cuando se establece como Button.Flyout, menuFlyout se muestra cuando se pulsa el botón o se invoca de otro modo.

Para asociar un MenuFlyout con otros controles, use la propiedad ContextFlyout que está disponible en cualquier UIElement.

Notas de las versiones anteriores

Nota

La propiedad ContextFlyout no está disponible antes de la actualización de aniversario de Windows 10 (SDK versión 14393). Para versiones anteriores, use la propiedad adjunta FlyoutBase.AttachedFlyout .

Puede usar la propiedad adjunta FlyoutBase.AttachedFlyout para asociar un MenuFlyout con otros controles. Cuando se asigna un MenuFlyout a otros elementos de la interfaz de usuario mediante FlyoutBase.AttachedFlyout, debe llamar al método ShowAt o al método estático ShowAttachedFlyout para mostrar el control flotante.

Además de los miembros enumerados anteriormente, hay otros miembros de la clase base FlyoutBase que se suelen usar en escenarios típicos de MenuFlyout:

Estilo de control y plantilla

Puede modificar el Estilo predeterminado y ControlTemplate para dar al control una apariencia única. Para obtener información sobre cómo modificar el estilo y la plantilla de un control, vea Aplicar estilos a los controles. El estilo, la plantilla y los recursos predeterminados que definen la apariencia del control se incluyen en el generic.xaml archivo . Para fines de diseño, generic.xaml está disponible localmente con el SDK o la instalación del paquete NuGet.

  • Estilos de WinUI (recomendado): Para obtener estilos actualizados de WinUI, consulte \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml.
  • Estilos que no son de WinUI: Para obtener estilos integrados, vea %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml.

Las ubicaciones pueden ser diferentes si personaliza la instalación. Los estilos y recursos de diferentes versiones del SDK pueden tener valores diferentes.

XAML también incluye recursos que puedes usar para modificar los colores de un control en distintos estados visuales sin modificar la plantilla de control. Se prefiere modificar estos recursos para establecer propiedades como Fondo y Primer plano. Para obtener más información, consulta la sección Estilo ligero del artículo Estilos XAML . Los recursos de estilo ligero están disponibles a partir de Windows 10, versión 1607 (SDK 14393).

Historial de versiones

Versión de Windows Versión del SDK Valor agregado
1809 17763 ShowAt

Constructores

MenuFlyout()

Inicializa una nueva instancia de la clase MenuFlyout .

Propiedades

AllowFocusOnInteraction

Obtiene o establece un valor que indica si el elemento obtiene automáticamente el foco cuando el usuario interactúa con él.

(Heredado de FlyoutBase)
AllowFocusWhenDisabled

Obtiene o establece un valor que especifica si el control puede recibir el foco cuando está deshabilitado.

(Heredado de FlyoutBase)
AreOpenCloseAnimationsEnabled

Obtiene o establece un valor que indica si las animaciones se reproducen cuando se abre o cierra el control flotante.

(Heredado de FlyoutBase)
Dispatcher

Obtiene el CoreDispatcher al que está asociado este objeto. CoreDispatcher representa una instalación que puede acceder a DependencyObject en el subproceso de la interfaz de usuario, incluso si un subproceso que no es de interfaz de usuario inicia el código.

(Heredado de DependencyObject)
ElementSoundMode

Obtiene o establece un valor que especifica la preferencia del control para si reproduce sonidos.

(Heredado de FlyoutBase)
InputDevicePrefersPrimaryCommands

Obtiene un valor que indica si el dispositivo de entrada usado para abrir el control flotante no abre fácilmente los comandos secundarios.

(Heredado de FlyoutBase)
IsConstrainedToRootBounds

Obtiene un valor que indica si el control flotante se muestra dentro de los límites de la raíz XAML.

(Heredado de FlyoutBase)
IsOpen

Obtiene un valor que indica si el control flotante está abierto.

(Heredado de FlyoutBase)
Items

Obtiene la colección utilizada para generar el contenido del menú.

LightDismissOverlayMode

Obtiene o establece un valor que especifica si el área fuera de una interfaz de usuario de cierre de luz se oscurece.

(Heredado de FlyoutBase)
MenuFlyoutPresenterStyle

Obtiene o establece el estilo que se usa al representar menuFlyout.

MenuFlyoutPresenterStyleProperty

Identifica la propiedad de dependencia MenuFlyoutPresenterStyle .

OverlayInputPassThroughElement

Obtiene o establece un elemento que debe recibir eventos de entrada de puntero incluso cuando se encuentra debajo de la superposición del control flotante.

(Heredado de FlyoutBase)
Placement

Obtiene o establece la ubicación predeterminada que se va a usar para el control flotante, en relación con su destino de selección de ubicación.

(Heredado de FlyoutBase)
ShouldConstrainToRootBounds

Obtiene o establece un valor que indica si el control flotante debe mostrarse dentro de los límites de la raíz XAML.

(Heredado de FlyoutBase)
ShowMode

Obtiene o establece un valor que indica cómo se comporta un control flotante cuando se muestra.

(Heredado de FlyoutBase)
Target

Obtiene el elemento que se va a usar como destino de selección de ubicación del control flotante.

(Heredado de FlyoutBase)
XamlRoot

Obtiene o establece el xamlRoot en el que se ve este control flotante.

(Heredado de FlyoutBase)

Métodos

ClearValue(DependencyProperty)

Borra el valor local de una propiedad de dependencia.

(Heredado de DependencyObject)
CreatePresenter()

Cuando se invalida en una clase derivada, inicializa un control para mostrar el contenido del control flotante según corresponda para el control derivado. Nota: Este método no tiene ninguna implementación de clase base y debe reemplazarse en una clase derivada.

(Heredado de FlyoutBase)
GetAnimationBaseValue(DependencyProperty)

Devuelve cualquier valor base establecido para una propiedad de dependencia, que se aplicaría en los casos en los que una animación no está activa.

(Heredado de DependencyObject)
GetValue(DependencyProperty)

Devuelve el valor efectivo actual de una propiedad de dependencia de dependencyObject.

(Heredado de DependencyObject)
Hide()

Cierra el control flotante.

(Heredado de FlyoutBase)
OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs)

Se llama justo antes de que se procese un método abreviado de teclado (acelerador) en la aplicación. Se invoca cada vez que el código de aplicación o los procesos internos llaman a ProcessKeyboardAccelerators. Invalide este método para influir en el control del acelerador predeterminado.

(Heredado de FlyoutBase)
ReadLocalValue(DependencyProperty)

Devuelve el valor local de una propiedad de dependencia, si se establece un valor local.

(Heredado de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una función de notificación para escuchar los cambios en una dependencyProperty específica en esta instancia de DependencyObject .

(Heredado de DependencyObject)
SetValue(DependencyProperty, Object)

Establece el valor local de una propiedad de dependencia en dependencyObject.

(Heredado de DependencyObject)
ShowAt(DependencyObject, FlyoutShowOptions)

Muestra el control flotante colocado en relación con el elemento especificado mediante las opciones especificadas.

(Heredado de FlyoutBase)
ShowAt(FrameworkElement)

Muestra el control flotante colocado en relación con el elemento especificado.

(Heredado de FlyoutBase)
ShowAt(UIElement, Point)

Muestra el control flotante colocado en el desplazamiento especificado en relación con el elemento de destino especificado.

TryInvokeKeyboardAccelerator(ProcessKeyboardAcceleratorEventArgs)

Intenta invocar un método abreviado de teclado (acelerador).

(Heredado de FlyoutBase)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Cancela una notificación de cambio registrada anteriormente mediante una llamada a RegisterPropertyChangedCallback.

(Heredado de DependencyObject)

Eventos

Closed

Se produce cuando el control flotante está oculto.

(Heredado de FlyoutBase)
Closing

Se produce cuando el control flotante comienza a ocultarse.

(Heredado de FlyoutBase)
Opened

Se produce cuando se muestra el control flotante.

(Heredado de FlyoutBase)
Opening

Se produce antes de que se muestre el control flotante.

(Heredado de FlyoutBase)

Se aplica a

Consulte también