Changer de page après la connexion dans Xamarin Forms


Ahmed Shamel

J'ai une application de formulaire xamarin qui a une page de connexion. Lorsque l'utilisateur se connecte avec succès, l'application accède à MainPageMenuune page principale de détails. J'ai le même problème. Voici mon code dans app.cs:

public App ()
{
    InitializeComponent();
    if (ApplicationSettings.NotLogin()) // Method to check if use if logged in or not
       MainPage = new LoginPage();            
    else            
       MainPage = new NavigationPage(new MainPageMenus());
}

Dans la page de connexion, j'écris ce code:

//Some code for login .....

MasterDetailPage fpm = new MasterDetailPage
{
      Master = new MainPageMenus(),
      Detail = new NavigationPage(new MainPage())
};
Application.Current.MainPage = fpm;

L'application accède correctement à la page fpm, mais le problème est que lorsque j'appuie sur l'icône de menu, j'obtiens la page de détails et non la page maître.

Ce problème est similaire à celui décrit dans cet article . Et le code ci-dessus est sélectionné comme réponse à la question. Mais le code ne fonctionne pas pour moi. Dans stack Overflow, il y a une question similaire et la réponse était d'utiliser ceci:

Application.Current.MainPage = new NavigationPage(new MainPageMenus());

But in this case the menu icon is hidden.

Here is the Xml of MainPageMenus:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"             
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"             
                  x:Class="XProject.Menus.MainPageMenus"                                    
                  xmlns:local="clr-namespace:XProject"
                  Title="E-Clinic"
                  >
    <MasterDetailPage.Master>
        <ContentPage Title="Menu">
            <StackLayout Orientation="Vertical">
                <Button Clicked="GoToApplicationSettingsPage" Text="Application Settings"></Button>
                <Button Clicked="GoToHxSettingsPage" Text="Medical History Settings"></Button>
                <Button Clicked="GoToVisitsSettingsPage"  Text="Visits Settings"></Button>
                <Button Clicked="GoToCustomFieldsPage" Text="Custom Fields"></Button>
                <Button Clicked="GoToAddCustomFieldsPage" Text="Add Custom Fields"></Button>
                <Button Clicked="GoToAddCommonInfoPage" Text="Common Info"></Button>
                <Button Clicked="GoToAddStatisticsPage" Text="Statistics"></Button>
                <Button Clicked="GoToBackupPage" Text="Create Backup"></Button>
                <Button Clicked="GoToRestoreBackupPage" Text="Restore Backup"></Button>
            </StackLayout>
        </ContentPage>
    </MasterDetailPage.Master>

    <MasterDetailPage.Detail>
        <local:MainPage></local:MainPage>
    </MasterDetailPage.Detail>
</MasterDetailPage>
Csharpest

This:

Application.Current.MainPage = new NavigationPage(new MainPageMenus());

is definitely wrong. Here you are assigning a NavigationPage with a MasterDetailPage as a root page. This is not gonna work, because only the detail page of the MasterDetailPage can be a navigation page. The Master Page should not be affected by the navigation.

What you should actually do is having the DETAIL PAGE of your MasterDetailPage a NavigationPage with child Pages (ContentPages).

This code is actually looking well, but the only problem is: You are setting "MainPageMenus" (which is in fact your MasterDetailPage) as the master page of ANOTHER MasterDetailPage.

//Some code for login .....

MasterDetailPage fpm = new MasterDetailPage
{
      Master = new MainPageMenus(),
      Detail = new NavigationPage(new MainPage())
};
Application.Current.MainPage = fpm;

What you should do is: Create a ContentPage that is the same as MainPageMenus and lets name it as MainPageMenusAsContentPage. The Xaml of MainPageMenusAsContentPage is:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XProject.Menus.MainPageMenusAsContentPage"
             Title="Menu"
             >
    <ContentPage.Content>
        <StackLayout Orientation="Vertical">
            <Button Clicked="GoToApplicationSettingsPage" Text="Application Settings"></Button>
            <Button Clicked="GoToHxSettingsPage" Text="Medical History Settings"></Button>
            <Button Clicked="GoToVisitsSettingsPage"  Text="Visits Settings"></Button>
            <Button Clicked="GoToCustomFieldsPage" Text="Custom Fields"></Button>
            <Button Clicked="GoToAddCustomFieldsPage" Text="Add Custom Fields"></Button>
            <Button Clicked="GoToAddCommonInfoPage" Text="Common Info"></Button>
            <Button Clicked="GoToAddStatisticsPage" Text="Statistics"></Button>
            <Button Clicked="GoToBackupPage" Text="Create Backup"></Button>
            <Button Clicked="GoToRestoreBackupPage" Text="Restore Backup"></Button>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Then use this code:

var masterDetailPage = new MasterDetailPage()
{
    Master =new MainPageMenusAsContentPage(), 
    Detail = new NavigationPage(new MainPage())
};

Application.Current.MainPage = masterDetailPage;

EDIT: For navigation:

either masterDetailPage.Detail.PushAsync(new CoolPage()); or masterDetailPage.Detail = new NavigationPage(new CoolPage());

They behave different, the first pushes a page to the stack, the second replaces the current detail page

Articles connexes


Xamarin Forms - Problème de redirection après la connexion

Craig J'ai une application Xamarin Forms utilisant le shell, avec le backend IdentityServer4 pour l'authentification. J'ai un bouton pour me connecter, lorsqu'il est pressé, l'utilisateur est dirigé vers mon IdentityServer comme prévu pour se connecter. Après

Coincé dans la page de chargement après la connexion

Rob J'ai pu installer OroCRM en utilisant ce guide mais j'ai installé les derniers nodeJS, PHP et OroCRM 4.1 Maintenant, après la connexion, je suis juste bloqué sur une page de chargement . J'ai essayé de chercher mais le seul que j'ai trouvé pertinent pour m

Comment changer de page dans Xamarin.Forms?

Eric: Comment basculer entre les pages dans Xamarin Forms? Ma page principale est une ContentPage et je ne veux pas passer à quelque chose comme une page à onglets. J'ai pu le pseudo-faire en trouvant les parents des contrôles qui devraient déclencher la nouve

Xamarin Forms - La page de connexion Azure renvoie introuvable ?

Pierre P. J'essaie de permettre à mes utilisateurs de s'authentifier sur Azure AD. J'ai enregistré mon application sur Azure Mobile Center, activé l'identité et pris note du point de terminaison d'authentification Azure. J'ai également enregistré mon applicati

changer la page d'Auth à Home après la connexion

Karim Sawma J'ai cette application Web qui, après une connexion réussie, la page doit rediriger de Auth.js vers Home.js , mais ce qu'elle fait, c'est qu'après une connexion réussie, il s'agit simplement de changer l'URL sans rediriger vers la page que je veux

page après la connexion dans playframework

Damon Julian: Dans ma pièce! app, j'ai codé les contrôleurs. class Security extends controllers.Secure.Security { ... static void onDisconnected() { Application.index(); } static void onAuthenticated() { User user = User.find("byEm

Xamarin Forms - Navigation après la connexion - Erreur

JEstevao Je suis un peu nouveau sur Xamarin Forms et j'ai du mal à comprendre quel est le problème avec la navigation entre les pages. J'ai déjà lu un tas d'articles de Xamarin docs, par exemple Xamarin Navigation Docs et des personnes ayant des problèmes simi

Changer de page après une connexion réussie

Khalid Ibn Walid J'ai donc essayé de naviguer sur la page de connexion pour rediriger vers une autre page si la condition est réussie, mais le problème est bien que cela fonctionne, mais lorsque je tape le mauvais mot de passe, la page redirige toujours c'est