Navegação do Shell do .NET MAUI
O Shell do .NET MAUI (.NET Multi-platform App UI) inclui uma experiência de navegação baseada em URI que usa rotas para navegar para qualquer página no aplicativo, sem precisar seguir uma hierarquia de navegação definida. Além disso, eles também oferecem a capacidade de navegar para trás, sem precisar visitar todas as páginas na pilha de navegação.
A Shell classe define as seguintes propriedades relacionadas à navegação:
BackButtonBehavior
, do tipoBackButtonBehavior
, uma propriedade anexada que define o comportamento do botão Voltar.CurrentItem
, do tipoShellItem
, o item atualmente selecionado.CurrentPage
, do tipo Page, a página apresentada no momento.CurrentState
, do tipoShellNavigationState
, o estado de navegação atual do Shell.Current
, do tipo Shell, um alias convertido em tipo paraApplication.Current.MainPage
.
As propriedades BackButtonBehavior
, CurrentItem
e CurrentState
são apoiadas por objetos BindableProperty, o que significa que elas podem ser destino de vinculações de dados.
A navegação é executada pela invocação do método GoToAsync, da classe Shell. Quando a navegação está prestes a ser executada, o evento é disparado e o Navigating
evento é disparado quando a Navigated
navegação é concluída.
Observação
A navegação ainda pode ser executada entre páginas em um aplicativo do Shell usando a Navigation
propriedade. Para obter mais informações, consulte Executar navegação sem moderação.
Rotas
A navegação é executada em um aplicativo Shell especificando um URI para o qual navegar. Os URIs de navegação podem ter três componentes:
- Uma rota, que define o caminho para o conteúdo que existe como parte da hierarquia visual do Shell.
- Uma página. Páginas que não existem na hierarquia visual do Shell podem ser enviadas por push para a pilha de navegação de qualquer lugar dentro de um aplicativo shell. Por exemplo, uma página de detalhes não será definida na hierarquia visual do Shell, mas poderá ser enviada por push para a pilha de navegação conforme necessário.
- Um ou mais parâmetros de consulta. Parâmetros de consulta são aqueles que podem ser passados para a página de destino durante a navegação.
Quando um URI de navegação incluir todos os três componentes, a estrutura será: //route/page?queryParameters
Registrar rotas
As rotas podem ser definidas em FlyoutItem, , e ShellContent objetos, TabBarTabpor meio de suas Route
propriedades:
<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>
Observação
Todos os itens na hierarquia do Shell têm uma rota associada a eles. Se você não definir uma rota, uma será gerada em tempo de execução. No entanto, não é garantido que as rotas geradas sejam consistentes em diferentes sessões de aplicativos.
O exemplo acima cria a seguinte hierarquia de rotas, que pode ser usada na navegação programática:
animals
domestic
cats
dogs
monkeys
elephants
bears
about
Para navegar até o objeto ShellContent para a rota dogs
, o URI da rota absoluta é //animals/domestic/dogs
. Da mesma forma, para navegar até o objeto ShellContent para a rota about
, o URI da rota absoluta é //about
.
Aviso
Um ArgumentException
será lançado na inicialização do aplicativo se uma rota duplicada for detectada. Essa exceção também será gerada se duas ou mais rotas do mesmo nível na hierarquia compartilharem um nome.
Registrar rotas da página de detalhes
No construtor de subclasse Shell ou em qualquer outro local executado antes que uma rota seja invocada, rotas adicionais podem ser registradas explicitamente para qualquer página de detalhes que não seja representada na hierarquia visual do Shell. Isso é feito com o método 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));
Este exemplo registra páginas de detalhes, que não são definidas na Shell subclasse, como rotas. Essas páginas de detalhes podem ser navegadas usando a navegação baseada em URI, de qualquer lugar dentro do aplicativo. As rotas para essas páginas são conhecidas como rotas globais.
Aviso
Um ArgumentException
será lançado se o método Routing.RegisterRoute
tentar registrar a mesma rota em dois ou mais tipos diferentes.
Como alternativa, as páginas podem ser registradas em hierarquias de rota diferentes, se necessário:
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));
Este exemplo habilita a navegação de páginas contextuais, onde a navegação até a rota details
partindo da página para a rota monkeys
exibe o MonkeyDetailPage
. Da mesma forma, a navegação até a rota details
partindo da página para a rota elephants
exibe o ElephantDetailPage
. Para obter mais informações, consulte Navegação contextual.
Observação
As páginas cujas rotas tenham sido registradas com o método Routing.RegisterRoute
podem ter o registro cancelado com o método Routing.UnRegisterRoute
, se necessário.
Realizar navegação
Para realizar a navegação, uma referência para a subclasse Shell deve ser obtida primeiro. Isso pode ser feito por meio da conversão da propriedade App.Current.MainPage
em um objeto Shell, ou usando a propriedade Shell.Current
. A navegação pode então ser realizada chamando o método GoToAsync no objeto Shell. Esse método navega até uma ShellNavigationState
e retorna um Task
, que será concluído depois que a animação de navegação for concluída. O objeto ShellNavigationState
é construído pelo método GoToAsync, de uma string
ou uma Uri
, e ele tem a propriedade Location
definida como o argumento string
ou Uri
.
Importante
Quando uma rota da hierarquia visual do Shell é navegada, uma pilha de navegação não é criada. Mas isso acontece quando uma página que não está na hierarquia visual do Shell é navegada.
O estado de navegação atual do Shell objeto pode ser recuperado por meio da Shell.Current.CurrentState
propriedade, que inclui o URI da rota exibida na Location
propriedade.
Rotas absolutas
A navegação pode ser realizada por meio da especificação de um URI absoluto válido como um argumento para o método GoToAsync:
await Shell.Current.GoToAsync("//animals/monkeys");
Este exemplo navega até a página para a rota monkeys
, com a rota sendo definida em um objeto ShellContent. O objeto ShellContent que representa a rota monkeys
é um filho de um objeto FlyoutItem, cuja rota é animals
.
Rotas relativas
A navegação também pode ser realizada por meio da especificação de um URI relativo válido como um argumento para o método GoToAsync. O sistema de roteamento tentará fazer a correspondência do URI a um objeto ShellContent. Portanto, se todas as rotas em um aplicativo forem exclusivas, a navegação poderá ser executada especificando apenas o nome da rota exclusiva como um URI relativo.
Os seguintes formatos de rota relativa são suportados:
Formatar | Descrição |
---|---|
route | A hierarquia de rotas será pesquisada para a rota especificada, para cima a partir da posição atual. A página correspondente será enviada para a pilha de navegação. |
/route | A hierarquia de rota será pesquisada a partir da rota especificada, para baixo a partir da posição atual. A página correspondente será enviada para a pilha de navegação. |
//route | A hierarquia de rotas será pesquisada para a rota especificada, para cima a partir da posição atual. A página correspondente substituirá a pilha de navegação. |
///route | A hierarquia de rota será pesquisada para a rota especificada, para baixo a partir da posição atual. A página correspondente substituirá a pilha de navegação. |
O exemplo a seguir navega até a página da monkeydetails
rota:
await Shell.Current.GoToAsync("monkeydetails");
Neste exemplo, a rota é pesquisada na hierarquia até que a monkeyDetails
página correspondente seja encontrada. Quando a página é encontrada, ela é enviada para a pilha de navegação.
Navegação contextual
As rotas relativas habilitam a navegação contextual. Por exemplo, considere a seguinte hierarquia de rotas:
monkeys
details
bears
details
Quando a página registrada para a rota monkeys
for exibida, a navegação até a rota details
exibirá a página registrada para a rota monkeys/details
. Da mesma forma, quando a página registrada para a rota bears
for exibida, a navegação até a rota details
exibirá a página registrada para a rota bears/details
. Saiba mais sobre como registrar as rotas neste exemplo em Registrar rotas de página.
Navegação regressiva
A navegação regressiva pode ser executada especificando ".." como o argumento para o método GoToAsync:
await Shell.Current.GoToAsync("..");
A navegação para trás com ".." também pode ser combinada com uma rota:
await Shell.Current.GoToAsync("../route");
Neste exemplo, a navegação para trás é executada e, em seguida, a navegação para a rota especificada.
Importante
Navegar para trás e para uma rota especificada só é possível se a navegação para trás colocar você no local atual na hierarquia de rotas para navegar até a rota especificada.
Da mesma forma, é possível navegar para trás várias vezes e, em seguida, navegar para uma rota especificada:
await Shell.Current.GoToAsync("../../route");
Neste exemplo, a navegação para trás é executada duas vezes e, em seguida, a navegação para a rota especificada.
Além disso, os dados podem ser passados pelas propriedades da consulta ao navegar para trás:
await Shell.Current.GoToAsync($"..?parameterToPassBack={parameterValueToPassBack}");
Neste exemplo, a navegação para trás é executada e o valor do parâmetro de consulta é passado para o parâmetro de consulta na página anterior.
Observação
Os parâmetros de consulta podem ser anexados a qualquer solicitação de navegação para trás.
Para obter mais informações sobre como passar dados ao navegar, consulte Passar dados.
Rotas inválidas
Os seguintes formatos de rota são inválidos:
Formatar | Explicação |
---|---|
//página ou ///página | No momento, as rotas globais não podem ser a única página na pilha de navegação. Portanto, não há suporte para roteamento absoluto para rotas globais. |
O uso desses formatos de rota resulta em um Exception
ser jogado.
Aviso
A tentativa de navegar até uma rota não existente resulta na geração de uma exceção ArgumentException
.
Depuração de navegação
Algumas das classes de Shell são decoradas com o DebuggerDisplayAttribute
, que especifica como uma classe ou um campo é exibido pelo depurador. Isso pode ajudar a depurar solicitações de navegação por meio da exibição de dados relacionados à solicitação de navegação. Por exemplo, a captura de tela a seguir mostra as propriedades CurrentItem
e CurrentState
do objeto Shell.Current
:
Neste exemplo, a propriedade CurrentItem
, do tipo FlyoutItem, exibe o título e a rota do objeto FlyoutItem. Da mesma forma, a CurrentState
propriedade, do tipo ShellNavigationState
, exibe o URI da rota exibida no aplicativo Shell.
Pilha de navegação
A Tab classe define uma Stack
propriedade, do tipo IReadOnlyList<Page>
, que representa a pilha de navegação atual dentro do Tab. A classe também fornece os seguintes métodos de navegação substituíveis:
GetNavigationStack
, retornaIReadOnlyList<Page>
, a pilha de navegação atual.OnInsertPageBefore
, chamado quandoINavigation.InsertPageBefore
é chamado.OnPopAsync
retornaTask<Page>
e é chamado quandoINavigation.PopAsync
é chamado.OnPopToRootAsync
retornaTask
e é chamado quandoINavigation.OnPopToRootAsync
é chamado.OnPushAsync
retornaTask
e é chamado quandoINavigation.PushAsync
é chamado.OnRemovePage
, chamado quandoINavigation.RemovePage
é chamado.
O exemplo a seguir mostra como substituir o OnRemovePage
método:
public class MyTab : Tab
{
protected override void OnRemovePage(Page page)
{
base.OnRemovePage(page);
// Custom logic
}
}
Neste exemplo, MyTab
os objetos devem ser consumidos na hierarquia visual do Shell em vez de Tab objetos.
Eventos de navegação
A Shell classe define o Navigating
evento, que é acionado quando a navegação está prestes a ser executada, devido à navegação programática ou à interação do usuário. O objeto ShellNavigatingEventArgs
que acompanha o evento Navigating
fornece as seguintes propriedades:
Propriedade | Type | Descrição |
---|---|---|
Current |
ShellNavigationState |
O URI da página atual. |
Source |
ShellNavigationSource |
O tipo de navegação que ocorreu. |
Target |
ShellNavigationState |
O URI que representa para onde a navegação se destina. |
CanCancel |
bool |
Um valor que indica se é possível cancelar a navegação. |
Cancelled |
bool |
Um valor que indica se a navegação foi cancelada. |
Além disso, a classe fornece um método que pode ser usado para cancelar a navegação e um método que retorna um ShellNavigatingDeferral
Cancel
GetDeferral
token que pode ser usado para concluir a ShellNavigatingEventArgs
navegação. Para obter mais informações sobre adiamento de navegação, consulte Adiamento de navegação.
A Shell classe também define o evento, que é acionado quando a Navigated
navegação é concluída. O objeto ShellNavigatedEventArgs
que acompanha o evento Navigated
fornece as seguintes propriedades:
Propriedade | Type | Descrição |
---|---|---|
Current |
ShellNavigationState |
O URI da página atual. |
Previous |
ShellNavigationState |
O URI da página anterior. |
Source |
ShellNavigationSource |
O tipo de navegação que ocorreu. |
Importante
O OnNavigating
método é chamado quando o Navigating
evento é acionado. Da mesma forma, o método é chamado quando o OnNavigated
Navigated
evento é acionado. Ambos os métodos podem ser substituídos em sua Shell subclasse para interceptar solicitações de navegação.
As classes ShellNavigatedEventArgs
e ShellNavigatingEventArgs
têm propriedades Source
do tipo ShellNavigationSource
. Esta enumeração fornece os seguintes valores:
Unknown
Push
Pop
PopToRoot
Insert
Remove
ShellItemChanged
ShellSectionChanged
ShellContentChanged
Portanto, a navegação pode ser interceptada em uma OnNavigating
substituição e as ações podem ser executadas com base na origem da navegação. Por exemplo, o código a seguir mostra como cancelar a navegação na ordem inversa caso os dados da página não tenham sido salvos:
protected override void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
// Cancel any back navigation.
if (args.Source == ShellNavigationSource.Pop)
{
args.Cancel();
}
// }
Diferimento de navegação
A navegação do shell pode ser interceptada e concluída ou cancelada com base na escolha do usuário. Isso pode ser obtido substituindo o OnNavigating
método em sua Shell subclasse e chamando o GetDeferral
ShellNavigatingEventArgs
método no objeto. Esse método retorna um token que tem um ShellNavigatingDeferral
Complete
método, que pode ser usado para concluir a solicitação de navegação:
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();
}
}
Neste exemplo, é exibida uma folha de ação que convida o usuário a concluir a solicitação de navegação ou cancelá-la. A navegação é cancelada invocando o Cancel
método no ShellNavigatingEventArgs
objeto. A navegação é concluída invocando o Complete
ShellNavigatingDeferral
método no token que foi recuperado GetDeferral
pelo método no ShellNavigatingEventArgs
objeto.
Aviso
O GoToAsync método lançará um se um usuário tentar navegar enquanto houver um InvalidOperationException
adiamento de navegação pendente.
Passar dados
Os dados primitivos podem ser passados como parâmetros de consulta baseados em cadeia de caracteres ao executar a navegação programática baseada em URI. Isso é obtido acrescentando ?
após uma rota, seguido por uma ID de parâmetro de consulta, =
, e um valor:
async void OnCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
string elephantName = (e.CurrentSelection.FirstOrDefault() as Animal).Name;
await Shell.Current.GoToAsync($"elephantdetails?name={elephantName}");
}
Este exemplo recupera o elefante atualmente selecionado no CollectionView, e navega até a elephantdetails
rota, passando elephantName
como um parâmetro de consulta.
Passar dados de navegação baseados em objeto de uso múltiplo
Os dados de navegação baseados em objeto de uso múltiplo podem ser passados com uma GoToAsync sobrecarga que especifica um IDictionary<string, object>
argumento:
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);
}
Este exemplo recupera o urso atualmente selecionado no CollectionView, como um Animal
arquivo . O Animal
objeto é adicionado a um Dictionary
com a chave Bear
. Em seguida, é realizada a navegação para a beardetails
rota, com o Dictionary
ser passado como parâmetro de navegação.
Todos os dados passados como argumento IDictionary<string, object>
são mantidos na memória durante o tempo de vida da página e não são liberados até que a página seja removida da pilha de navegação. Isso pode ser problemático, conforme mostrado no seguinte cenário:
Page1
navega paraPage2
usar o GoToAsync método, passando um objeto chamadoMyData
.Page2
em seguida, recebeMyData
como um parâmetro de consulta.Page2
navega paraPage3
usar o GoToAsync método, sem passar nenhum dado.Page3
navega para trás com o GoToAsync método.Page2
em seguida, recebeMyData
novamente como um parâmetro de consulta.
Embora isso seja desejável em muitos cenários, se não for desejado, você deve limpar o argumento com o IDictionary<string, object>
Clear
método depois que ele for recebido pela primeira vez por uma página.
Passar dados de navegação baseados em objeto de uso único
Os dados de navegação baseados em objeto de uso único podem ser passados com uma GoToAsync sobrecarga que especifica um ShellNavigationQueryParameters argumento. Um ShellNavigationQueryParameters objeto destina-se a dados de navegação de uso único que são limpos após a navegação. O exemplo a seguir mostra a navegação ao passar dados de uso único:
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);
}
Este exemplo recupera o urso atualmente selecionado no CollectionView, como um Animal
que é adicionado ao ShellNavigationQueryParameters objeto. Em seguida, a navegação para a beardetails
rota é executada, com o ShellNavigationQueryParameters objeto sendo passado como um parâmetro de navegação. Após a ShellNavigationQueryParameters navegação, os dados no objeto são limpos.
Receber dados de navegação
Há duas abordagens para receber dados de navegação:
- A classe que representa a página para a qual está sendo navegada, ou a classe da página , pode ser decorada com um para cada parâmetro de
BindingContext
QueryPropertyAttribute consulta. Para obter mais informações, consulte Processar dados de navegação usando atributos de propriedade de consulta. - A classe que representa a página para a qual está sendo navegada ou a classe da página ,
BindingContext
pode implementar aIQueryAttributable
interface. Para obter mais informações, consulte Processar dados de navegação usando um único método.
Processar dados de navegação usando atributos de propriedade de consulta
Os dados de navegação podem ser recebidos decorando a classe de recebimento com um QueryPropertyAttribute para cada parâmetro de consulta baseado em cadeia de caracteres e parâmetro de navegação baseado em objeto:
Os dados de navegação podem ser recebidos decorando a classe de recebimento com um QueryPropertyAttribute para cada parâmetro de consulta baseado em cadeia de caracteres, parâmetro de navegação baseado em objeto ou ShellNavigationQueryParameters objeto:
[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;
}
}
Neste exemplo, o primeiro argumento para o especifica o nome da propriedade que receberá os dados, com o QueryPropertyAttribute segundo argumento especificando a id do parâmetro. Portanto, o QueryPropertyAttribute exemplo acima especifica que a Bear
propriedade receberá os dados passados no Bear
parâmetro de navegação na chamada de GoToAsync método.
Observação
Os valores de parâmetro de consulta baseados em cadeia de caracteres que são recebidos por meio do QueryPropertyAttribute são automaticamente decodificados por URL.
Processar dados de navegação usando um único método
Os dados de navegação podem ser recebidos implementando a IQueryAttributable
interface na classe de recebimento. A IQueryAttributable
interface especifica que a classe de implementação deve implementar o ApplyQueryAttributes
método. Esse método tem um query
argumento, do tipo IDictionary<string, object>
, que contém todos os dados passados durante a navegação. Cada chave no dicionário é uma ID de parâmetro de consulta, com seu valor correspondente ao objeto que representa os dados. A vantagem de usar essa abordagem é que os dados de navegação podem ser processados usando um único método, o que pode ser útil quando você tem vários itens de dados de navegação que exigem processamento como um todo.
O exemplo a seguir mostra uma classe de modelo de exibição que implementa a IQueryAttributable
interface:
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");
}
...
}
Neste exemplo, o método recupera o ApplyQueryAttributes
objeto que corresponde à Monkey
chave no query
dicionário, que foi passado como um argumento para a chamada de GoToAsync método.
Importante
Os valores de parâmetro de consulta baseados em cadeia de caracteres recebidos por meio da IQueryAttributable
interface não são decodificados automaticamente por URL.
Passar e processar vários itens de dados
Vários parâmetros de consulta baseados em cadeia de caracteres podem ser passados conectando-os com &
o . Por exemplo, o código a seguir passa dois itens de dados:
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}");
}
Este exemplo de código recupera o elefante atualmente selecionado no CollectionView, e navega até a elephantdetails
rota, passando elephantName
e elephantLocation
como parâmetros de consulta.
Para receber vários itens de dados, a classe que representa a página para a qual está sendo navegada ou a classe da página , pode ser decorada BindingContext
com um QueryPropertyAttribute para cada parâmetro de consulta baseado em cadeia de caracteres:
[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
}
}
...
}
Neste exemplo, a classe é decorada com um para cada parâmetro de QueryPropertyAttribute consulta. O primeiro QueryPropertyAttribute especifica que a propriedade receberá os dados passados no parâmetro de consulta, enquanto o segundo QueryPropertyAttribute especifica que a Location
Name
propriedade receberá os dados passados no name
location
parâmetro de consulta. Em ambos os casos, os valores de parâmetro de consulta são especificados no URI na chamada de GoToAsync método.
Como alternativa, os dados de navegação podem ser processados por um único método, implementando a interface na classe que representa a IQueryAttributable
página que está sendo navegada ou a classe da BindingContext
página :
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());
...
}
...
}
Neste exemplo, o método recupera o ApplyQueryAttributes
valor dos name
parâmetros e location
query do URI na chamada do GoToAsync método.
Observação
Os parâmetros de consulta baseados em cadeia de caracteres e os parâmetros de navegação baseados em objeto podem ser passados simultaneamente ao executar a navegação baseada em rota.
Comportamento do botão Voltar
A aparência e o comportamento do botão Voltar podem ser redefinidos definindo a propriedade anexada BackButtonBehavior
como um BackButtonBehavior
objeto. A BackButtonBehavior
classe define as seguintes propriedades:
Command
, do tipo ICommand, que é executado quando o botão Voltar é pressionado.CommandParameter
, do tipoobject
, que é o parâmetro passado paraCommand
.IconOverride
, do tipo ImageSource, o ícone usado para o botão Voltar.IsEnabled
, do tipoboolean
, indica se o botão Voltar está habilitado. O valor padrão étrue
.IsVisible
, do tipoboolean
, indica se o botão Voltar está visível. O valor padrão étrue
.TextOverride
, do tipostring
, o texto usado para o botão Voltar.
Todas essas propriedades são apoiadas por objetos BindableProperty, o que significa que essas propriedades podem ser o destino de vinculações de dados.
O código a seguir mostra um exemplo de redefinição da aparência e do comportamento do botão Voltar:
<ContentPage ...>
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding BackCommand}"
IconOverride="back.png" />
</Shell.BackButtonBehavior>
...
</ContentPage>
A propriedade Command
é definida como uma ICommand a ser executada quando o botão Voltar é pressionado, e a propriedade IconOverride
é definida como o ícone usado pelo botão Voltar:
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de