.NET MAUI Shell-navigering
.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 typenShellItem
, det för närvarande markerade objektet. -
CurrentPage
, av typen Page, den för närvarande visade sidan. -
CurrentState
, av typenShellNavigationState
, det aktuella navigeringstillståndet för Shell. -
Current
, av typen Shell, som ger åtkomst till det aktuella shell.
Egenskaperna BackButtonBehavior, CurrentItem
och 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 GoToAsync på Shell-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
:
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.
Navigeringsstack
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:
-
GetNavigationStack
returnerar den aktuella navigeringsstackenIReadOnlyList<Page>
. -
OnInsertPageBefore
anropas närINavigation.InsertPageBefore
anropas. -
OnPopAsync
returnerarTask<Page>
och anropas närINavigation.PopAsync
anropas. -
OnPopToRootAsync
returnerarTask
och anropas närINavigation.OnPopToRootAsync
anropas. -
OnPushAsync
returnerarTask
och anropas närINavigation.PushAsync
anropas. -
OnRemovePage
anropas närINavigation.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.
Navigeringshändelser
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();
}
}
Fördröjning av navigering
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 GetDeferral
på ShellNavigatingEventArgs
-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 Cancel
på ShellNavigatingEventArgs
-objektet. Navigeringen slutförs genom att anropa metoden Complete
på den ShellNavigatingDeferral
token som hämtades av metoden GetDeferral
på ShellNavigatingEventArgs
-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:
-
Page1
navigerar tillPage2
med hjälp av metoden GoToAsync och skickar in ett objekt med namnetMyData
.Page2
tar sedan emotMyData
som en frågeparameter. -
Page2
navigerar tillPage3
med hjälp av metoden GoToAsync, utan att skicka några data. -
Page3
navigerar bakåt med metoden GoToAsync.Page2
tar sedan emotMyData
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:
- 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. - 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 typenobject
, som är parametern som skickas tillCommand
. -
IconOverride
, av typen ImageSource, ikonen som används för bakåtknappen. -
IsEnabled
, av typenboolean
, anger om bakåtknappen är aktiverad. Standardvärdet ärtrue
. -
IsVisible
, av typenboolean
, anger om bakåtknappen är synlig. Standardvärdet ärtrue
. -
TextOverride
, av typenstring
, 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
, IconOveride
och TextOveride
BindableProperty 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 IsVisible
BindableProperty 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: