Dela via


.NET MAUI Shell-navigering

Bläddra bland exempel. Bläddra bland exempel

.NET Multi-platform App UI (.NET MAUI) Shell innehåller en URI-baserad navigeringsupplevelse som använder vägar för att navigera till valfri sida i appen, utan att behöva följa en uppsättning navigeringshierarki. Dessutom ger det också möjlighet att navigera bakåt utan att behöva besöka alla sidor i navigeringsstacken.

Klassen Shell definierar följande navigeringsrelaterade egenskaper:

  • BackButtonBehavior, av typen BackButtonBehavior, en bifogad egenskap som definierar beteendet för bakåtknappen.
  • CurrentItem, av typen ShellItem, det för närvarande markerade objektet.
  • CurrentPage, av typen Page, den för närvarande visade sidan.
  • CurrentState, av typen ShellNavigationState, det aktuella navigeringstillståndet för Shell.
  • Current, av typen Shell, som ger åtkomst till det aktuella shell.

Egenskaperna BackButtonBehavior, CurrentItemoch CurrentState backas upp av BindableProperty objekt, vilket innebär att dessa egenskaper kan vara mål för databindningar.

Navigeringen utförs genom att anropa metoden GoToAsync från klassen Shell. När navigeringen är på väg att utföras utlöses Navigating händelsen och händelsen Navigated utlöses när navigeringen är klar.

Not

Navigering kan fortfarande utföras mellan sidor i en Shell-app med hjälp av egenskapen Navigation. Mer information finns i Utföra lägeslös navigering.

Vägar

Navigeringen utförs i en Shell-app genom att ange en URI att navigera till. Navigerings-URI:er kan ha tre komponenter:

  • En väg, som definierar sökvägen till innehåll som finns som en del av Shells visuella hierarki.
  • En sida. Sidor som inte finns i den visuella Shell-hierarkin kan skickas till navigeringsstacken var som helst i en Shell-app. En informationssida definieras till exempel inte i den visuella Shell-hierarkin, utan kan skickas till navigeringsstacken efter behov.
  • En eller flera av frågeparametrar. Frågeparametrar är parametrar som kan skickas till målsidan när du navigerar.

När en navigerings-URI innehåller alla tre komponenterna är strukturen: //route/page?queryParameters

Registrera vägar

Vägar kan definieras på FlyoutItem, TabBar, Taboch ShellContent objekt via deras Route egenskaper:

<Shell ...>
    <FlyoutItem ...
                Route="animals">
        <Tab ...
             Route="domestic">
            <ShellContent ...
                          Route="cats" />
            <ShellContent ...
                          Route="dogs" />
        </Tab>
        <ShellContent ...
                      Route="monkeys" />
        <ShellContent ...
                      Route="elephants" />  
        <ShellContent ...
                      Route="bears" />
    </FlyoutItem>
    <ShellContent ...
                  Route="about" />                  
    ...
</Shell>

Notera

Alla objekt i Shell-hierarkin har en väg som är associerad med dem. Om du inte anger en rutt genereras en vid körning. Genererade vägar är dock inte garanterade att vara konsekventa mellan olika appsessioner.

I exemplet ovan skapas följande routningshierarki, som kan användas i programmeringsnavigering:

animals
  domestic
    cats
    dogs
  monkeys
  elephants
  bears
about

För att navigera till objektet för rutt ShellContent på rutt dogs är den absoluta rutt-URI:n //animals/domestic/dogs. För att navigera till ShellContent-objektet för about-rutten, är den fullständiga ruttens URI //about.

Varning

En ArgumentException genereras vid appstart om en duplicerad väg identifieras. Det här undantaget utlöses också om två eller flera vägar på samma nivå i hierarkin delar ett vägnamn.

Registrera detaljsidans rutter

I konstruktorn för underklassen Shell, eller på någon annan plats som körs innan en rutt anropas, kan ytterligare rutter uttryckligen registreras för alla detaljsidor som inte representeras i den visuella Shell-hierarkin. Detta görs med metoden Routing.RegisterRoute:

Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));
Routing.RegisterRoute("beardetails", typeof(BearDetailPage));
Routing.RegisterRoute("catdetails", typeof(CatDetailPage));
Routing.RegisterRoute("dogdetails", typeof(DogDetailPage));
Routing.RegisterRoute("elephantdetails", typeof(ElephantDetailPage));

I det här exemplet registreras informationssidor som inte definieras i underklassen Shell som vägar. Dessa informationssidor kan sedan navigeras till med hjälp av URI-baserad navigering, var som helst i appen. Rutterna för sådana sidor kallas globala rutter.

Varning

En ArgumentException utlöses om Routing.RegisterRoute-metoden försöker registrera samma rutt till två eller fler olika typer.

Alternativt kan sidor registreras i olika routningshierarkier om det behövs:

Routing.RegisterRoute("monkeys/details", typeof(MonkeyDetailPage));
Routing.RegisterRoute("bears/details", typeof(BearDetailPage));
Routing.RegisterRoute("cats/details", typeof(CatDetailPage));
Routing.RegisterRoute("dogs/details", typeof(DogDetailPage));
Routing.RegisterRoute("elephants/details", typeof(ElephantDetailPage));

Det här exemplet möjliggör kontextuell sidnavigering, där navigering till rutten details från sidan för rutten monkeys visar MonkeyDetailPage. Om du navigerar till details-rutten från sidan för elephants-rutten visas ElephantDetailPage. Mer information finns i Kontextbaserad navigering.

Not

Sidor vars vägar har registrerats med metoden Routing.RegisterRoute kan avregistreras med metoden Routing.UnRegisterRoute om det behövs.

Navigera

För att kunna utföra navigeringen måste en referens till Shell underklass först hämtas. Den här referensen kan hämtas via egenskapen Shell.Current. Navigeringen kan sedan utföras genom att anropa metoden GoToAsyncShell-objektet. Den här metoden navigerar till en ShellNavigationState och returnerar en Task som slutförs när navigeringsanimeringen har slutförts. ShellNavigationState-objektet konstrueras av metoden GoToAsync, från en string, eller en Uri, och egenskapen Location har angetts till argumentet string eller Uri.

Viktig

När en väg från den visuella Shell-hierarkin navigeras till skapas ingen navigeringsstack. Men när en sida som inte finns i den visuella Shell-hierarkin navigeras till skapas en navigeringsstack.

Det aktuella navigeringstillståndet för det Shell objektet kan hämtas via egenskapen Shell.Current.CurrentState, som innehåller URI:n för den visade vägen i egenskapen Location.

Absoluta vägar

Navigering kan utföras genom att ange en giltig absolut URI som ett argument för metoden GoToAsync:

await Shell.Current.GoToAsync("//animals/monkeys");

Det här exemplet navigerar till sidan för monkeys-rutten, där rutten är definierad på ett ShellContent-objekt. Det ShellContent objekt som representerar monkeys rutten är ett underordnat objekt till ett FlyoutItem objekt, vars rutt är animals.

Varning

Absoluta vägar fungerar inte med sidor som är registrerade med metoden Routing.RegisterRoute.

Relativa vägar

Navigering kan också utföras genom att ange en giltig relativ URI som ett argument för metoden GoToAsync. Routningssystemet försöker matcha URI:n med ett ShellContent objekt. Om alla vägar i en app är unika kan navigering därför utföras genom att endast ange det unika routningsnamnet som en relativ URI.

Följande exempel går till sidan för ruta monkeydetails:

await Shell.Current.GoToAsync("monkeydetails");

I det här exemplet söks rutt monkeyDetails tills den matchande sidan hittas. När sidan hittas skickas den till navigeringsstacken.

Varning

Relativa vägar fungerar inte med sidor som definieras i en underklassad Shell-klass, vilket vanligtvis är AppShell.xaml. I stället kan endast sidor som registrerats med metoden Routing.RegisterRoute skickas till navigeringsstacken med hjälp av relativa vägar. För mer information, se registrera detaljsidans rutter.

Sammanhangsberoende navigering

Relativa vägar möjliggör sammanhangsberoende navigering. Tänk till exempel på följande routningshierarki:

monkeys
  details
bears
  details

När den registrerade sidan för rutt monkeys visas, kommer den registrerade sidan för rutt monkeys/details att visas när man navigerar till rutt details. På samma sätt, när den registrerade sidan för rutten bears visas, kommer navigering till rutten details att visa den registrerade sidan för rutten bears/details. Information om hur du registrerar rutterna i det här exemplet finns i Registrera sidrutterna.

Bakåtriktad navigering

Bakåtnavigering kan utföras genom att ange ".." som argument för metoden GoToAsync:

await Shell.Current.GoToAsync("..");

Bakåtnavigering med ".." kan också kombineras med en väg:

await Shell.Current.GoToAsync("../route");

I det här exemplet utförs bakåtnavigering och sedan navigering till den angivna vägen.

Viktig

Att navigera bakåt och till en angiven väg är bara möjligt om bakåtnavigeringen placerar dig på den aktuella platsen i routningshierarkin för att navigera till den angivna vägen.

På samma sätt går det att navigera bakåt flera gånger och sedan navigera till en angiven väg:

await Shell.Current.GoToAsync("../../route");

I det här exemplet utförs bakåtnavigering två gånger och sedan navigering till den angivna vägen.

Dessutom kan data skickas via frågeegenskaper när du navigerar bakåt:

await Shell.Current.GoToAsync($"..?parameterToPassBack={parameterValueToPassBack}");

I det här exemplet utförs bakåtnavigering och frågeparametervärdet skickas till frågeparametern på föregående sida.

Not

Frågeparametrar kan läggas till i valfri bakåtnavigeringsbegäran.

Mer information om hur du skickar data när du navigerar finns i Skicka data.

Ogiltiga vägar

Följande routningsformat är ogiltiga:

Format Förklaring
// sidan eller ///sidan Globala vägar kan för närvarande inte vara den enda sidan i navigeringsstacken. Därför stöds inte absolut routning till globala vägar.

Användning av dessa routningsformat resulterar i att en Exception genereras.

Varning

Vid försök att navigera till en obefintlig rutt genereras ett ArgumentException-undantag.

Felsökningsvägledning

Vissa av Shell-klasserna är dekorerade med DebuggerDisplayAttribute, som anger hur en klass eller ett fält visas av felsökningsprogrammet. Detta kan hjälpa dig att felsöka navigeringsbegäranden genom att visa data som är relaterade till navigeringsbegäran. Följande skärmbild visar till exempel egenskaperna CurrentItem och CurrentState för objektet Shell.Current:

Skärmbild av felsökningsprogrammet.

I det här exemplet visar egenskapen CurrentItem, av typen FlyoutItem, rubriken och vägen för objektet FlyoutItem. På samma sätt visar egenskapen CurrentState, av typen ShellNavigationState, URI:n för den visade vägen i Shell-appen.

Klassen Tab definierar en Stack egenskap, av typen IReadOnlyList<Page>, som representerar den aktuella navigeringsstacken i Tab. Klassen innehåller också följande övergripande navigeringsmetoder:

  • GetNavigationStackreturnerar den aktuella navigeringsstacken IReadOnlyList<Page>.
  • OnInsertPageBeforeanropas när INavigation.InsertPageBefore anropas.
  • OnPopAsyncreturnerar Task<Page>och anropas när INavigation.PopAsync anropas.
  • OnPopToRootAsyncreturnerar Taskoch anropas när INavigation.OnPopToRootAsync anropas.
  • OnPushAsyncreturnerar Taskoch anropas när INavigation.PushAsync anropas.
  • OnRemovePageanropas när INavigation.RemovePage anropas.

I följande exempel visas hur du åsidosätter metoden OnRemovePage:

public class MyTab : Tab
{
    protected override void OnRemovePage(Page page)
    {
        base.OnRemovePage(page);

        // Custom logic
    }
}

I det här exemplet ska objekt MyTab användas i den visuella Shell-hierarkin i stället för objekt Tab.

Klassen Shell definierar händelsen Navigating, som utlöses när navigeringen ska utföras, antingen på grund av programmeringsnavigering eller användarinteraktion. Det ShellNavigatingEventArgs objekt som medföljer händelsen Navigating innehåller följande egenskaper:

Egenskap Typ Beskrivning
Current ShellNavigationState URI:n för den aktuella sidan.
Source ShellNavigationSource Den typ av navigering som inträffade.
Target ShellNavigationState URI:n som representerar var navigeringen är avsedd.
CanCancel bool Ett värde som anger om det är möjligt att avbryta navigeringen.
Cancelled bool Ett värde som anger om navigeringen avbröts.

Dessutom innehåller klassen ShellNavigatingEventArgs en Cancel metod som kan användas för att avbryta navigeringen och en GetDeferral metod som returnerar en ShellNavigatingDeferral token som kan användas för att slutföra navigeringen. Mer information om navigeringsfördröjning finns i Navigeringsfördröjning.

Klassen Shell definierar också händelsen Navigated, som utlöses när navigeringen har slutförts. Det ShellNavigatedEventArgs objekt som medföljer händelsen Navigated innehåller följande egenskaper:

Egenskap Typ Beskrivning
Current ShellNavigationState URI:n för den aktuella sidan.
Previous ShellNavigationState URI:n för föregående sida.
Source ShellNavigationSource Den typ av navigering som inträffade.

Viktig

Metoden OnNavigating anropas när händelsen Navigating utlöses. På samma sätt anropas metoden OnNavigated när den Navigated händelsen utlöses. Båda metoderna kan åsidosättas i din Shell-underklass för att övervaka navigeringsbegäranden.

Klasserna ShellNavigatedEventArgs och ShellNavigatingEventArgs har båda Source egenskaper av typen ShellNavigationSource. Den här uppräkningen innehåller följande värden:

  • Unknown
  • Push
  • Pop
  • PopToRoot
  • Insert
  • Remove
  • ShellItemChanged
  • ShellSectionChanged
  • ShellContentChanged

Därför kan navigering fångas upp i en OnNavigating överskrivning och åtgärder kan utföras baserat på navigeringskällan. Följande kod visar till exempel hur du avbryter bakåtnavigering om data på sidan inte har sparats:

protected override void OnNavigating(ShellNavigatingEventArgs args)
{
    base.OnNavigating(args);

    // Cancel any back navigation.
    if (args.Source == ShellNavigationSource.Pop)
    {
        args.Cancel();
    }
}

Gränssnittsnavigering kan fångas upp och slutföras eller avbrytas baserat på användarens val. Detta kan uppnås genom att åsidosätta OnNavigating-metoden i underklassen Shell och genom att anropa metoden GetDeferralShellNavigatingEventArgs-objektet. Den här metoden returnerar en ShellNavigatingDeferral token som har en Complete-metod som kan användas för att slutföra navigeringsbegäran:

public MyShell : Shell
{
    // ...
    protected override async void OnNavigating(ShellNavigatingEventArgs args)
    {
        base.OnNavigating(args);

        ShellNavigatingDeferral token = args.GetDeferral();

        var result = await DisplayActionSheet("Navigate?", "Cancel", "Yes", "No");
        if (result != "Yes")
        {
            args.Cancel();
        }
        token.Complete();
    }    
}

I det här exemplet visas ett åtgärdsblad som uppmanar användaren att slutföra navigeringsbegäran eller avbryta den. Navigeringen avbryts genom att anropa metoden CancelShellNavigatingEventArgs-objektet. Navigeringen slutförs genom att anropa metoden Complete på den ShellNavigatingDeferral token som hämtades av metoden GetDeferralShellNavigatingEventArgs-objektet.

Varning

Metoden GoToAsync genererar en InvalidOperationException om en användare försöker navigera medan det finns en väntande navigeringsuppskjutning.

Skicka data

Primitiva data kan skickas som strängbaserade frågeparametrar när du utför URI-baserad programmeringsnavigering. Detta uppnås genom att lägga till ? efter en väg, följt av ett frågeparameter-ID, =och ett värde:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}

Det här exemplet hämtar den markerade elefanten i CollectionViewoch navigerar till elephantdetails-rutten och skickar elephantName som en frågeparameter.

Skicka objektbaserade navigeringsdata för flera användningsområden

Objektbaserade navigeringsdata för flera användningsområden kan skickas med en GoToAsync överlagring som anger ett IDictionary<string, object> argument:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
    var navigationParameter = new Dictionary<string, object>
    {
        { "Bear", animal }
    };
    await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}

Det här exemplet hämtar den valda björnen i CollectionView, som en Animal. Objektet Animal läggs till i en Dictionary med nyckeln Bear. Sedan utförs navigering till beardetails väg, där Dictionary skickas som en navigeringsparameter.

Alla data som skickas som ett IDictionary<string, object> argument behålls i minnet under sidans livslängd och släpps inte förrän sidan har tagits bort från navigeringsstacken. Detta kan vara problematiskt, vilket visas i följande scenario:

  1. Page1 navigerar till Page2 med hjälp av metoden GoToAsync och skickar in ett objekt med namnet MyData. Page2 tar sedan emot MyData som en frågeparameter.
  2. Page2 navigerar till Page3 med hjälp av metoden GoToAsync, utan att skicka några data.
  3. Page3 navigerar bakåt med metoden GoToAsync. Page2 tar sedan emot MyData igen som en frågeparameter.

Även om detta är önskvärt i många scenarier, om det inte är önskvärt bör du rensa argumentet IDictionary<string, object> med metoden Clear efter att det först har tagits emot av en sida.

Skicka objektbaserade navigeringsdata för enkel användning

Objektbaserade navigeringsdata för enkel användning kan skickas med en GoToAsync överlagring som anger ett ShellNavigationQueryParameters argument. Ett ShellNavigationQueryParameters objekt är avsett för navigeringsdata för enkel användning som rensas när navigeringen har inträffat. I följande exempel visas navigering när data för enkel användning skickas:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Animal animal = e.CurrentSelection.FirstOrDefault() as Animal;
    var navigationParameter = new ShellNavigationQueryParameters
    {
        { "Bear", animal }
    };
    await Shell.Current.GoToAsync($"beardetails", navigationParameter);
}

Det här exemplet hämtar den för närvarande markerade björnen i CollectionView, som läggs till som ett Animal i ShellNavigationQueryParameters-objektet. Sedan utförs navigeringen till beardetails-rutten, med ShellNavigationQueryParameters-objektet som skickas som en navigeringsparameter. När navigeringen har utförts rensas data i ShellNavigationQueryParameters-objektet.

Ta emot navigeringsdata

Det finns två sätt att ta emot navigeringsdata:

  1. Klassen som representerar sidan som navigeras till, eller klassen för sidans BindingContext, kan dekoreras med en QueryPropertyAttribute för varje frågeparameter. Mer information finns i Bearbeta navigeringsdata med frågeegenskapsattribut.
  2. Klassen som representerar sidan som navigeras till, eller klassen för sidans BindingContext, kan implementera IQueryAttributable-gränssnittet. Mer information finns i Bearbeta navigeringsdata med en enda metod.

Bearbeta navigeringsdata med frågeegenskapsattribut

Navigeringsdata kan tas emot genom att dekorera den mottagande klassen med en QueryPropertyAttribute för varje strängbaserad frågeparameter, objektbaserad navigeringsparameter eller ShellNavigationQueryParameters objekt:

[QueryProperty(nameof(Bear), "Bear")]
public partial class BearDetailPage : ContentPage
{
    Animal bear;
    public Animal Bear
    {
        get => bear;
        set
        {
            bear = value;
            OnPropertyChanged();
        }
    }

    public BearDetailPage()
    {
        InitializeComponent();
        BindingContext = this;
    }
}

I det här exemplet anger det första argumentet för QueryPropertyAttribute namnet på den egenskap som ska ta emot data, med det andra argumentet som anger parameter-ID. Därför anger QueryPropertyAttribute i exemplet ovan att egenskapen Bear tar emot data som skickas i Bear navigeringsparametern i GoToAsync-metodanropet.

Viktig

Strängbaserade frågeparametervärden som tas emot via QueryPropertyAttribute avkodas automatiskt.

Varning

Att ta emot navigeringsdata med hjälp av QueryPropertyAttribute är inte säkert och bör inte användas med fullständig trimning eller NativeAOT. I stället bör du implementera IQueryAttributable-gränssnittet på typer som måste acceptera frågeparametrar. För mer information, se Bearbeta navigationsdata med en enda metod, Trimma en .NET MAUI-app, och Inbyggd AOT-distribution.

Bearbeta navigeringsdata med en enda metod

Du kan ta emot navigeringsdata genom att implementera IQueryAttributable-gränssnittet på den mottagande klassen. Gränssnittet IQueryAttributable anger att implementeringsklassen måste implementera metoden ApplyQueryAttributes. Den här metoden har ett query argument av typen IDictionary<string, object>, som innehåller alla data som skickas under navigeringen. Varje nyckel i ordlistan är ett frågeparameter-ID, med dess värde som motsvarar det objekt som representerar data. Fördelen med att använda den här metoden är att navigeringsdata kan bearbetas med en enda metod, vilket kan vara användbart när du har flera navigeringsdata som kräver bearbetning som helhet.

I följande exempel visas en vymodellklass som implementerar IQueryAttributable-gränssnittet:

public class MonkeyDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Monkey { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        Monkey = query["Monkey"] as Animal;
        OnPropertyChanged("Monkey");
    }
    ...
}

I det här exemplet hämtar metoden ApplyQueryAttributes objektet som motsvarar den Monkey nyckeln i ordlistan query, som skickades som ett argument till GoToAsync-metodanropet.

Viktig

Strängbaserade frågeparametervärden som tas emot via IQueryAttributable-gränssnittet avkodas inte automatiskt.

Skicka och bearbeta flera dataobjekt

Flera strängbaserade frågeparametrar kan skickas genom att ansluta dem med &. Följande kod skickar till exempel två dataobjekt:

async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
    string elephantLocation = (e.CurrentSelection.FirstOrDefault() as Animal).Location;
    await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}&location={elephantLocation}");
}

Det här kodexemplet hämtar den markerade elefanten i CollectionViewoch navigerar till elephantdetails-rutten och skickar elephantName och elephantLocation som frågeparametrar.

Om du vill ta emot flera dataobjekt kan klassen som representerar sidan som navigeras till, eller klassen för sidans BindingContext, dekoreras med en QueryPropertyAttribute för varje strängbaserad frågeparameter:

[QueryProperty(nameof(Name), "name")]
[QueryProperty(nameof(Location), "location")]
public partial class ElephantDetailPage : ContentPage
{
    public string Name
    {
        set
        {
            // Custom logic
        }
    }

    public string Location
    {
        set
        {
            // Custom logic
        }
    }
    ...    
}

I det här exemplet är klassen dekorerad med en QueryPropertyAttribute för varje frågeparameter. Den första QueryPropertyAttribute anger att egenskapen Name tar emot data som skickas i frågeparametern name, medan den andra QueryPropertyAttribute anger att egenskapen Location tar emot data som skickas i frågeparametern location. I båda fallen anges frågeparametervärdena i URI:n i GoToAsync-metodanropet.

Varning

Att ta emot navigeringsdata med hjälp av QueryPropertyAttribute är inte trimsäkert och bör inte användas med fullständig trimmning eller NativeAOT. I stället bör du implementera IQueryAttributable-gränssnittet på typer som måste acceptera frågeparametrar. För mer information, se Trimma en .NET MAUI-app och Native AOT-distribution.

Alternativt kan navigeringsdata bearbetas med en enda metod genom att implementera IQueryAttributable-gränssnittet på klassen som representerar sidan som navigeras till, eller klassen för sidans BindingContext:

public class ElephantDetailViewModel : IQueryAttributable, INotifyPropertyChanged
{
    public Animal Elephant { get; private set; }

    public void ApplyQueryAttributes(IDictionary<string, object> query)
    {
        string name = HttpUtility.UrlDecode(query["name"].ToString());
        string location = HttpUtility.UrlDecode(query["location"].ToString());
        ...        
    }
    ...
}

I det här exemplet hämtar metoden ApplyQueryAttributes värdet för name och location frågeparametrar från URI:n i GoToAsync-metodanropet.

Not

Strängbaserade frågeparametrar och objektbaserade navigeringsparametrar kan skickas samtidigt när du utför routningsbaserad navigering.

Beteende för bakåtknapp

Tillbakaknappens utseende och beteende kan omdefinieras genom att ställa in egenskapen BackButtonBehavior till ett BackButtonBehavior-objekt. Klassen BackButtonBehavior definierar följande egenskaper:

  • Command, av typen ICommand, som körs när bakåtknappen trycks in.
  • CommandParameter, av typen object, som är parametern som skickas till Command.
  • IconOverride, av typen ImageSource, ikonen som används för bakåtknappen.
  • IsEnabled, av typen boolean, anger om bakåtknappen är aktiverad. Standardvärdet är true.
  • IsVisible, av typen boolean, anger om bakåtknappen är synlig. Standardvärdet är true.
  • TextOverride, av typen string, texten som används för bakåtknappen.

Alla dessa egenskaper backas upp av BindableProperty objekt, vilket innebär att egenskaperna kan vara mål för databindningar. Varje BindableProperty har ett OneTime bindningsläge, vilket innebär att data går från källan till målet men bara när BindingContext ändras.

Alla dessa egenskaper backas upp av BindableProperty objekt, vilket innebär att egenskaperna kan vara mål för databindningar. Objekten Command, CommandParameter, IconOverideoch TextOverideBindableProperty har OneTime bindningslägen, vilket innebär att data går från källan till målet men bara när BindingContext ändras. Objekten IsEnabled och IsVisibleBindableProperty har OneWay bindningslägen, vilket innebär att data går från källan till målet.

Följande kod visar ett exempel på omdefiniering av bakåtknappens utseende och beteende:

<ContentPage ...>    
    <Shell.BackButtonBehavior>
        <BackButtonBehavior Command="{Binding BackCommand}"
                            IconOverride="back.png" />   
    </Shell.BackButtonBehavior>
    ...
</ContentPage>

Egenskapen Command är inställd på en ICommand som ska köras när bakåtknappen trycks in, och egenskapen IconOverride är inställd på ikonen som används för bakåtknappen:

Skärmbild av en ikonåterställning för shell-bakåtknappen.