Como você alterna entre as páginas no Formulários Xamarin?
Minha página principal é uma ContentPage e não quero mudar para algo como uma página com guias.
Consegui pseudo-fazer, encontrando os pais dos controles que deveriam acionar a nova página até encontrar a ContentPage e, em seguida, trocar o Conteúdo com controles por uma nova página. Mas isso parece muito desleixado.
xamarin
xamarin.forms
Eric
fonte
fonte
Respostas:
Xamarin.Forms
suporta vários hosts de navegação integrados:NavigationPage
, onde a próxima página desliza,TabbedPage
, o que você não gostaCarouselPage
, que permite alternar para a esquerda e para a direita para as páginas seguintes / anteriores.Além disso, todas as páginas também suportam o
PushModalAsync()
que apenas enviar uma nova página sobre a existente.No final, se você quiser ter certeza de que o usuário não pode voltar à página anterior (usando um gesto ou o botão de voltar do hardware), você pode manter o mesmo
Page
exibida e substituí-laContent
.As opções sugeridas para substituir a página raiz também funcionam, mas você terá que lidar com isso de forma diferente para cada plataforma.
fonte
Na classe App, você pode definir a MainPage como uma página de navegação e definir a página raiz como sua ContentPage:
Então, em sua primeira chamada ContentPage:
fonte
Android.Content.Res
para navegação. Isso não parece estar certo, de onde devo importá-lo?Se o seu projeto foi configurado como um projeto de formulários PCL (e muito provavelmente também como formulários compartilhados, mas eu não tentei isso), há uma classe App.cs que se parece com isto:
você pode modificar o
GetMainPage
método para retornar uma nova TabbedPaged ou alguma outra página que você definiu no projetoA partir daí, você pode adicionar comandos ou manipuladores de eventos para executar o código e fazer
fonte
Navigation
neste exemplo? - É um objeto que você criou em algum lugar? - Não estou vendo neste exemplo de código.PushAsync()
não funcionou para mim, masPushModalAsync()
simEmpurre uma nova página na pilha e remova a página atual. Isso resulta em uma troca.
Você precisa estar em uma página de navegação primeiro:
Alternar conteúdo não é o ideal, pois você tem apenas uma grande página e um conjunto de eventos de página como OnAppearing ect.
fonte
Navigation.RemovePage();
não é compatível com Android.await Navigation.PushAsync(new SecondPage(),false);
Se você não quiser ir para a página anterior, ou seja, não permitir que o usuário volte para a tela de login depois que a autorização for concluída, você pode usar;
Se você quiser habilitar a funcionalidade de volta, basta usar
fonte
Parece que este tópico é muito popular e será triste não mencionar aqui que existe uma forma alternativa -
ViewModel First Navigation
. A maioria dos frameworks MVVM que o utilizam, no entanto, se você quiser entender do que se trata, continue lendo.Toda a documentação oficial do Xamarin.Forms está demonstrando uma solução simples, mas um pouco diferente do MVVM puro. Isso ocorre porque o
Page
(View) não deve saber nada sobre oViewModel
e vice-versa. Aqui está um ótimo exemplo dessa violação:Se você tem um aplicativo de 2 páginas, essa abordagem pode ser boa para você. No entanto, se você estiver trabalhando em uma solução para uma grande empresa, é melhor escolher uma
ViewModel First Navigation
abordagem. É uma abordagem um pouco mais complicada, mas muito mais limpa, que permite navegar entre emViewModels
vez de navegar entrePages
(visualizações). Uma das vantagens ao lado da separação clara de interesses é que você pode facilmente passar parâmetros para o próximoViewModel
ou executar um código de inicialização assíncrono logo após a navegação. Agora, para detalhes.(Vou tentar simplificar todos os exemplos de código tanto quanto possível).
1. Em primeiro lugar, precisamos de um local onde possamos registrar todos os nossos objetos e, opcionalmente, definir seu tempo de vida. Para este assunto, podemos usar um contêiner IOC, você pode escolher um. Neste exemplo vou usar o Autofac (é um dos mais rápidos disponíveis). Podemos manter uma referência a ele no
App
para que esteja disponível globalmente (não é uma boa ideia, mas necessária para simplificação):2. Precisaremos de um objeto responsável por recuperar uma
Page
(Visualização) para um específicoViewModel
e vice-versa. O segundo caso pode ser útil no caso de configuração da página raiz / principal do aplicativo. Para isso, devemos concordar com uma convenção simples de que todos osViewModels
devem estar noViewModels
diretório ePages
(Visualizações) devem estar noViews
diretório. Em outras palavras,ViewModels
deve residir no[MyApp].ViewModels
namespace ePages
(Views) no[MyApp].Views
namespace. Além disso, devemos concordar queWelcomeView
(Página) deve ter umWelcomeViewModel
e etc. Aqui está um exemplo de código de um mapeador:3. Para o caso de configuração de uma página raiz, precisaremos
ViewModelLocator
definir oBindingContext
automaticamente:4. Por fim, precisaremos de uma abordagem
NavigationService
que apoieViewModel First Navigation
:Como você pode ver, existe uma
BaseViewModel
- classe base abstrata para todas asViewModels
onde você pode definir métodos como osInitializeAsync
que serão executados logo após a navegação. E aqui está um exemplo de navegação:Como você entende, essa abordagem é mais complicada, mais difícil de depurar e pode ser confusa. No entanto, existem muitas vantagens, além disso, você não precisa implementá-lo sozinho, já que a maioria dos frameworks MVVM oferece suporte para ele fora da caixa. O exemplo de código demonstrado aqui está disponível no github .
Existem muitos artigos bons sobre
ViewModel First Navigation
abordagem e um eBook grátis Enterprise Application Patterns usando Xamarin.Forms que explica este e muitos outros tópicos interessantes em detalhes.fonte
Usando o método PushAsync (), você pode enviar por push e PopModalAsync () exibir páginas de e para a pilha de navegação. No meu exemplo de código abaixo, tenho uma página de navegação (página raiz) e, a partir dessa página, empurro uma página de conteúdo que é uma página de login, uma vez que concluo minha página de login, volto para a página raiz
~~~ A navegação pode ser considerada como uma pilha de objetos Página do último a entrar, primeiro a sair. Para mover de uma página para outra, um aplicativo enviará uma nova página para essa pilha. Para retornar à página anterior, o aplicativo irá retirar a página atual da pilha. Esta navegação no Xamarin.Forms é feita pela interface INavigation
Xamarin.Forms possui uma classe NavigationPage que implementa esta interface e irá gerenciar a pilha de páginas. A classe NavigationPage também adicionará uma barra de navegação ao topo da tela que exibe um título e também terá um botão Voltar apropriado da plataforma que retornará à página anterior. O código a seguir mostra como envolver um NavigationPage em torno da primeira página em um aplicativo:
Referência ao conteúdo listado acima e um link que você deve revisar para obter mais informações sobre os Formulários Xamarin, consulte a seção Navegação:
http://developer.xamarin.com/guides/cross-platform/xamarin-forms/introduction-to-xamarin-forms/
~~~
// Código removido para simplificar, apenas o pop é exibido
fonte
Navegação de uma página para outra página em Xamarin.forms usando a propriedade Navigation Abaixo do código de amostra
Para navegar de uma página para outra página com a célula de visualização Abaixo do código Xamrian.forms
Exemplo como abaixo
fonte
Ligar:
Crie este método dentro de App.xaml.cs:
fonte
Quando você deseja navegar de YourPage para a próxima página, você faz:
Você pode ler mais sobre a navegação de Formulários Xamarin aqui: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical
A Microsoft tem documentos muito bons sobre isso.
Existe também o conceito mais recente do
Shell
. Ele permite uma nova forma de estruturar seu aplicativo e simplifica a navegação em alguns casos.Introdução: https://devblogs.microsoft.com/xamarin/shell-xamarin-forms-4-0-getting-started/
Vídeo sobre os fundamentos do Shell: https://www.youtube.com/watch?v=0y1bUAcOjZY&t=3112s
Documentos: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/
fonte
Página XAML adicionar isto
na página CS
fonte
Depois de
PushAsync
usarPopAsync
(comthis
) para remover a página atual.fonte
No Xamarin temos uma página chamada NavigationPage. Ele contém pilha de ContentPages. NavigationPage tem métodos como PushAsync () e PopAsync (). PushAsync adiciona uma página no topo da pilha, nesse momento essa página se tornará a página ativa no momento. O método PopAsync () remove a página do topo da pilha.
Em App.Xaml.Cs podemos definir como.
MainPage = nova NavigationPage (new YourPage ());
esperar Navigation.PushAsync (new newPage ()); este método adicionará newPage ao topo da pilha. Neste momento, o nePage será a página ativa no momento.
fonte