MenuFlyout Classe

Definizione

Rappresenta un riquadro a comparsa che visualizza un menu di comandi.

/// [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>
Ereditarietà
Object IInspectable DependencyObject FlyoutBase MenuFlyout
Derivato
Attributi

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

Esempio

Suggerimento

Per altre info, linee guida per la progettazione ed esempi di codice, vedi Menu e menu di scelta rapida.

Se è installata l'app WinUI 2 Gallery , fai clic qui per aprire l'app e vedere MenuFlyout in azione.

Questo esempio crea una classe MenuFlyout e usa la proprietà ContextFlyout, una proprietà disponibile per la maggior parte dei controlli, per mostrare la classe MenuFlyout come un menu di scelta rapida.

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

L'esempio successivo è quasi identico, ma invece di usare la proprietà ContextFlyout per mostrare la classe MenuFlyout come menu di scelta rapida, l'esempio usa la proprietà FlyoutBase.ShowAttachedFlyout per mostrare un 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;
    }
}

Questo esempio mostra come aggiungere e rimuovere voci di menu in fase di esecuzione in base alla modifica delle condizioni nell'app.

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

Commenti

Suggerimento

Per altre info, linee guida per la progettazione ed esempi di codice, vedi Menu e menu di scelta rapida.

MenuFlyout visualizza temporaneamente un elenco di comandi o opzioni correlati a ciò che l'utente sta attualmente eseguendo.

Controllo menu a comparsa

Usa un controllo Riquadro a comparsa per visualizzare singoli elementi e un controllo MenuFlyout per visualizzare un menu di voci. Per altre info, vedi Menu e menu di scelta rapida.

Un controllo MenuFlyout può essere utilizzato come valore della proprietà Button.Flyout . Questa impostazione viene in genere impostata in XAML come parte di una definizione dell'interfaccia utente della pagina. Button è l'unico controllo con una proprietà Flyout dedicata. Se impostato su Button.Flyout, MenuFlyout viene visualizzato quando il pulsante viene toccato o richiamato in altro modo.

Per associare un oggetto MenuFlyout ad altri controlli, utilizzare la proprietà ContextFlyout disponibile in qualsiasi UIElement.

Note per le versioni precedenti

Nota

La proprietà ContextFlyout non è disponibile prima dell'aggiornamento dell'anniversario di Windows 10 (SDK versione 14393). Per le versioni precedenti, usare la proprietà associata FlyoutBase.AttachedFlyout .

È possibile utilizzare la proprietà associata FlyoutBase.AttachedFlyout per associare menuFlyout ad altri controlli. Quando un oggetto MenuFlyout viene assegnato ad altri elementi dell'interfaccia utente usando FlyoutBase.AttachedFlyout, devi chiamare il metodo ShowAt o il metodo Statico ShowAttachedFlyout per visualizzare il riquadro a comparsa.

Oltre ai membri elencati in precedenza, esistono altri membri della classe base FlyoutBase che vengono spesso usati negli scenari tipici di MenuFlyout:

Stile di controllo e modello

È possibile modificare lo stile predefinito e controlTemplate per assegnare al controllo un aspetto univoco. Per informazioni sulla modifica dello stile e del modello di un controllo, vedere Applicazione di stili ai controlli. Lo stile predefinito, il modello e le risorse che definiscono l'aspetto del controllo sono inclusi nel generic.xaml file. Ai fini della progettazione, generic.xaml è disponibile in locale con l'installazione dell'SDK o del pacchetto NuGet.

  • Stili WinUI (scelta consigliata): Per gli stili aggiornati da WinUI, vedere \Users\<username>\.nuget\packages\microsoft.ui.xaml\<version>\lib\uap10.0\Microsoft.UI.Xaml\Themes\generic.xaml.
  • Stili non WinUI: Per gli stili predefiniti, vedere %ProgramFiles(x86)%\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic\generic.xaml.

I percorsi potrebbero essere diversi se l'installazione è stata personalizzata. Gli stili e le risorse di versioni diverse dell'SDK potrebbero avere valori diversi.

XAML include anche risorse che è possibile usare per modificare i colori di un controllo in stati di visualizzazione diversi senza modificare il modello di controllo. La modifica di queste risorse è preferibile per impostare proprietà come Background e Foreground. Per altre info, vedi la sezione Stili leggeri dell'articolo Stili XAML . Le risorse di stili leggeri sono disponibili a partire da Windows 10 versione 1607 (SDK 14393).

Cronologia delle versioni

Versione di Windows Versione dell'SDK Valore aggiunto
1809 17763 ShowAt

Costruttori

MenuFlyout()

Inizializza una nuova istanza della classe MenuFlyout .

Proprietà

AllowFocusOnInteraction

Ottiene o imposta un valore che indica se l'elemento ottiene automaticamente lo stato attivo quando l'utente interagisce con esso.

(Ereditato da FlyoutBase)
AllowFocusWhenDisabled

Ottiene o imposta un valore che specifica se il controllo può ricevere lo stato attivo quando è disabilitato.

(Ereditato da FlyoutBase)
AreOpenCloseAnimationsEnabled

Ottiene o imposta un valore che indica se le animazioni vengono riprodotte quando il riquadro a comparsa viene aperto o chiuso.

(Ereditato da FlyoutBase)
Dispatcher

Ottiene coreDispatcher a cui è associato questo oggetto. CoreDispatcher rappresenta una funzionalità che può accedere a DependencyObject nel thread dell'interfaccia utente anche se il codice viene avviato da un thread non dell'interfaccia utente.

(Ereditato da DependencyObject)
ElementSoundMode

Ottiene o imposta un valore che specifica la preferenza del controllo per la riproduzione di suoni.

(Ereditato da FlyoutBase)
InputDevicePrefersPrimaryCommands

Ottiene un valore che indica se il dispositivo di input utilizzato per aprire il riquadro a comparsa non apre facilmente i comandi secondari.

(Ereditato da FlyoutBase)
IsConstrainedToRootBounds

Ottiene un valore che indica se il riquadro a comparsa viene visualizzato all'interno dei limiti della radice XAML.

(Ereditato da FlyoutBase)
IsOpen

Ottiene un valore che indica se il riquadro a comparsa è aperto.

(Ereditato da FlyoutBase)
Items

Ottiene la raccolta utilizzata per generare il contenuto del menu.

LightDismissOverlayMode

Ottiene o imposta un valore che specifica se l'area esterna a un'interfaccia utente di chiusura della luce viene oscurata.

(Ereditato da FlyoutBase)
MenuFlyoutPresenterStyle

Ottiene o imposta lo stile utilizzato per il rendering di MenuFlyout.

MenuFlyoutPresenterStyleProperty

Identifica la proprietà di dipendenza MenuFlyoutPresenterStyle .

OverlayInputPassThroughElement

Ottiene o imposta un elemento che deve ricevere eventi di input del puntatore anche quando si trova sotto la sovrimpressione del riquadro a comparsa.

(Ereditato da FlyoutBase)
Placement

Ottiene o imposta il posizionamento predefinito da utilizzare per il riquadro a comparsa, in relazione alla destinazione di posizionamento.

(Ereditato da FlyoutBase)
ShouldConstrainToRootBounds

Ottiene o imposta un valore che indica se il riquadro a comparsa deve essere visualizzato all'interno dei limiti della radice XAML.

(Ereditato da FlyoutBase)
ShowMode

Ottiene o imposta un valore che indica il comportamento di un riquadro a comparsa quando viene visualizzato.

(Ereditato da FlyoutBase)
Target

Ottiene l'elemento da utilizzare come destinazione di posizionamento del riquadro a comparsa.

(Ereditato da FlyoutBase)
XamlRoot

Ottiene o imposta l'oggetto XamlRoot in cui viene visualizzato questo riquadro a comparsa.

(Ereditato da FlyoutBase)

Metodi

ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà di dipendenza.

(Ereditato da DependencyObject)
CreatePresenter()

Quando ne viene eseguito l'override in una classe derivata, inizializza un controllo per visualizzare il contenuto del riquadro a comparsa come appropriato per il controllo derivato. Nota: questo metodo non ha implementazione della classe di base e deve essere sottoposto a override in una classe derivata.

(Ereditato da FlyoutBase)
GetAnimationBaseValue(DependencyProperty)

Restituisce qualsiasi valore di base stabilito per una proprietà di dipendenza, che si applica nei casi in cui un'animazione non è attiva.

(Ereditato da DependencyObject)
GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza da dependencyObject.

(Ereditato da DependencyObject)
Hide()

Chiude il riquadro a comparsa.

(Ereditato da FlyoutBase)
OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs)

Chiamato subito prima dell'elaborazione di un tasto di scelta rapida (acceleratore) nell'app. Richiamato ogni volta che il codice dell'applicazione o i processi interni chiamano ProcessKeyboardAccelerators. Eseguire l'override di questo metodo per influenzare la gestione dell'acceleratore predefinita.

(Ereditato da FlyoutBase)
ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se è impostato un valore locale.

(Ereditato da DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una funzione di notifica per l'ascolto delle modifiche apportate a una dipendenza specifica in questa istanza di DependencyObject .

(Ereditato da DependencyObject)
SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza su dependencyObject.

(Ereditato da DependencyObject)
ShowAt(DependencyObject, FlyoutShowOptions)

Mostra il riquadro a comparsa posizionato in relazione all'elemento specificato utilizzando le opzioni specificate.

(Ereditato da FlyoutBase)
ShowAt(FrameworkElement)

Mostra il riquadro a comparsa posizionato in relazione all'elemento specificato.

(Ereditato da FlyoutBase)
ShowAt(UIElement, Point)

Mostra il riquadro a comparsa posizionato in corrispondenza dell'offset specificato in relazione all'elemento di destinazione specificato.

TryInvokeKeyboardAccelerator(ProcessKeyboardAcceleratorEventArgs)

Tenta di richiamare una scelta rapida da tastiera (acceleratore).

(Ereditato da FlyoutBase)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annulla una notifica di modifica registrata in precedenza chiamando RegisterPropertyChangedCallback.

(Ereditato da DependencyObject)

Eventi

Closed

Si verifica quando il riquadro a comparsa è nascosto.

(Ereditato da FlyoutBase)
Closing

Si verifica quando il riquadro a comparsa inizia a essere nascosto.

(Ereditato da FlyoutBase)
Opened

Si verifica quando viene visualizzato il riquadro a comparsa.

(Ereditato da FlyoutBase)
Opening

Si verifica prima che venga visualizzato il riquadro a comparsa.

(Ereditato da FlyoutBase)

Si applica a

Vedi anche