FlyoutPage
L'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI) FlyoutPage è una pagina che gestisce due pagine correlate di informazioni, ovvero una pagina a comparsa che presenta elementi e una pagina di dettaglio che presenta informazioni dettagliate sugli elementi nella pagina a comparsa.
A FlyoutPage ha due comportamenti di layout:
- In un layout popover, la pagina dei dettagli copre o copre parzialmente la pagina a comparsa. Se si seleziona un elemento nella pagina a comparsa, si passa alla pagina dei dettagli corrispondente. Le app in esecuzione sui telefoni usano sempre questo comportamento di layout.
- In un layout diviso, la pagina a comparsa viene visualizzata a sinistra e la pagina dei dettagli si trova a destra. Le app in esecuzione su tablet o desktop possono usare questo comportamento di layout, con Windows che lo usa per impostazione predefinita.
Per altre informazioni sul comportamento del layout, vedere Comportamento del layout.
FlyoutPage definisce le proprietà seguenti:
Detail
, di tipo Page, definisce la pagina dei dettagli visualizzata per l'elemento selezionato nella pagina a comparsa.Flyout
, di tipo Page, definisce la pagina a comparsa.FlyoutLayoutBehavior
, di tipoFlyoutLayoutBehavior
, indica il comportamento del layout delle pagine a comparsa e dei dettagli.IsGestureEnabled
, di tipobool
, determina se un movimento di scorrimento rapido passerà tra il riquadro a comparsa e le pagine di dettaglio. Il valore predefinito di questa proprietà ètrue
.IsPresented
, di tipobool
, determina se viene visualizzata la pagina a comparsa o di dettaglio. Il valore predefinito di questa proprietà èfalse
, che visualizza la pagina dei dettagli. Deve essere impostato sutrue
per visualizzare la pagina a comparsa.
Le IsGestureEnabled
proprietà , IsPresented
e FlyoutLayoutBehavior
sono supportate da BindableProperty oggetti , il che significa che possono essere destinazioni di data binding e stili.
FlyoutPage definisce anche un IsPresentedChanged
evento generato quando la IsPresented
proprietà cambia valore.
Avviso
FlyoutPage non è compatibile con le app della shell MAUI .NET e viene generata un'eccezione se si tenta di usare FlyoutPage in un'app Shell. Per altre informazioni sulle app shell, vedere Shell.
Creare un riquadro a comparsa
Per creare una pagina a comparsa, creare un FlyoutPage oggetto e impostarne le Flyout
proprietà e Detail
. La Flyout
proprietà deve essere impostata su ContentPage oggetto e la Detail
proprietà deve essere impostata su un TabbedPageoggetto , NavigationPageo ContentPage . In questo modo si potrà garantire un'esperienza utente uniforme su tutte le piattaforme.
Importante
Un FlyoutPage oggetto è progettato per essere la pagina radice di un'app e usarlo come pagina figlio in altri tipi di pagina potrebbe comportare un comportamento imprevisto e incoerente.
Nell'esempio seguente viene illustrato un FlyoutPage oggetto che imposta le Flyout
proprietà e Detail
:
<FlyoutPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:FlyoutPageNavigation"
x:Class="FlyoutPageNavigation.MainPage">
<FlyoutPage.Flyout>
<local:FlyoutMenuPage x:Name="flyoutPage" />
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<local:ContactsPage />
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
</FlyoutPage>
In questo esempio la Flyout
proprietà viene impostata su un ContentPage oggetto e la Detail
proprietà è impostata su un NavigationPage oggetto contenente un ContentPage oggetto .
Nell'esempio seguente viene illustrata la definizione dell'oggetto FlyoutMenuPage
, di tipo ContentPage:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:FlyoutPageNavigation"
x:Class="FlyoutPageNavigation.FlyoutMenuPage"
Padding="0,40,0,0"
IconImageSource="hamburger.png"
Title="Personal Organiser">
<CollectionView x:Name="collectionView"
x:FieldModifier="public"
SelectionMode="Single">
<CollectionView.ItemsSource>
<x:Array Type="{x:Type local:FlyoutPageItem}">
<local:FlyoutPageItem Title="Contacts"
IconSource="contacts.png"
TargetType="{x:Type local:ContactsPage}" />
<local:FlyoutPageItem Title="TodoList"
IconSource="todo.png"
TargetType="{x:Type local:TodoListPage}" />
<local:FlyoutPageItem Title="Reminders"
IconSource="reminders.png"
TargetType="{x:Type local:ReminderPage}" />
</x:Array>
</CollectionView.ItemsSource>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="5,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding IconSource}" />
<Label Grid.Column="1"
Margin="20,0"
Text="{Binding Title}"
FontSize="20"
FontAttributes="Bold"
VerticalOptions="Center" />
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ContentPage>
In questo esempio, la pagina del riquadro a comparsa è costituita da un CollectionView oggetto popolato con i dati impostando la relativa ItemsSource
proprietà su una matrice di FlyoutPageItem
oggetti. L'esempio seguente illustra la definizione della FlyoutPageItem
classe :
public class FlyoutPageItem
{
public string Title { get; set; }
public string IconSource { get; set; }
public Type TargetType { get; set; }
}
Una classe DataTemplate è assegnata alla proprietà CollectionView.ItemTemplate
per visualizzare ogni FlyoutPageItem
. DataTemplate contiene una classe Grid composta da una classe Image e una classe Label. Image visualizza il valore della proprietà IconSource
e Label visualizza il valore della proprietà Title
per ogni FlyoutPageItem
. Inoltre, la pagina a comparsa ha le Title
proprietà e IconImageSource
impostate. L'icona verrà visualizzata nella pagina di dettaglio a condizione che in quest'ultima sia presente una barra del titolo.
Nota
La pagina Flyout
deve avere la proprietà Title
impostata. In caso contrario, verrà generata un'eccezione.
Lo screenshot seguente mostra il riquadro a comparsa risultante:
Creare e visualizzare la pagina dei dettagli
L'oggetto FlyoutMenuPage
contiene un CollectionView oggetto a cui fa riferimento la MainPage
classe . In questo modo la MainPage
classe può registrare un gestore per l'evento SelectionChanged
. In questo modo l'oggetto MainPage
può impostare la Detail
proprietà sulla pagina che rappresenta l'elemento selezionato CollectionView . L'esempio seguente mostra il gestore eventi:
public partial class MainPage : FlyoutPage
{
public MainPage()
{
...
flyoutPage.collectionView.SelectionChanged += OnSelectionChanged;
}
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = e.CurrentSelection.FirstOrDefault() as FlyoutPageItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
if (!((IFlyoutPageController)this).ShouldShowSplitMode)
IsPresented = false;
}
}
}
In questo esempio, il OnSelectionChanged
gestore eventi recupera CurrentSelection
dall'oggetto CollectionView e imposta la pagina dei dettagli su un'istanza del tipo di pagina archiviato nella TargetType
proprietà dell'oggetto FlyoutPageItem
. La pagina dei dettagli viene visualizzata impostando la FlyoutPage.IsPresented
proprietà su false
, a condizione che FlyoutPage
non usi un layout diviso. Quando si FlyoutPage
usa un layout diviso, le pagine a comparsa e di dettaglio vengono visualizzate e pertanto non è necessario impostare la FlyoutPage.IsPresented
proprietà.
Comportamento del layout
Il FlyoutPage modo in cui visualizza il riquadro a comparsa e le pagine di dettaglio dipende dal fattore di forma del dispositivo su cui è in esecuzione l'app, dall'orientamento del dispositivo e dal valore della FlyoutLayoutBehavior
proprietà. Questa proprietà deve essere impostata su un valore dell'enumerazione FlyoutLayoutBehavior
, che definisce i membri seguenti:
Default
: le pagine vengono visualizzate usando l'impostazione predefinita della piattaforma.Popover
: la pagina dei dettagli copre o copre parzialmente la pagina a comparsa.Split
: la pagina a comparsa viene visualizzata a sinistra e la pagina dei dettagli si trova a destra.SplitOnLandscape
: una schermata divisa viene usata quando il dispositivo è in orientamento orizzontale.SplitOnPortrait
: viene usata una schermata divisa quando il dispositivo è in orientamento verticale.
Nell'esempio seguente viene illustrato come impostare la FlyoutLayoutBehavior
proprietà in un FlyoutPageoggetto :
<FlyoutPage ...
FlyoutLayoutBehavior="Split">
...
</FlyoutPage>
Importante
Il valore della FlyoutLayoutBehavior
proprietà influisce solo sulle app in esecuzione su tablet o desktop. Le app in esecuzione sui telefoni hanno sempre il Popover
comportamento.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per