2016-07-13 18 views
1

Ich habe eine Anmeldeseite, die der Ausgangspunkt meiner Anwendung ist. Diese Seite hat Navigationsleiste mit dem folgenden Code versteckt:Strange NavigationBar Verhalten in Xamarin Forms

NavigationPage.SetHasNavigationBar(this, false); 

Von Login-Seite ich meine Dashboard-Seite mit dem folgenden Code zu starten:

Navigation.PushAsync(new Dashboard()); 

Ich tue dies auf zwei verschiedenen Orten in meiner Login-Seite. Der erste Platz ist innerhalb des Konstruktors der Anmeldeseite, wo ich nach aktiver Benutzersitzung suche, und der zweite Platz ist innerhalb der Methode, die Knopfklick für die Anmeldung handhabt.

So nenne ich Navigation.PushAsync() wie folgt aus:

1. Weg:

public Login() 
{ 
    NavigationPage.SetHasNavigationBar(this, false); 
    InitializeComponent(); 
    var loginSession = App.DataService.CheckUserSession(); 
    if(loginSession != null) 
    { 
     Navigation.PushAsync(new Dashboard()); 
    } 
} 

2. Art und Weise:

public void OnLogin(object o, EventArgs e) 
{ 
    Navigation.PushAsync(new Dashboard()); 
} 

Und das ist, wo die Dinge beginnen, seltsam zu gehen. Wenn ich meine Dashboard-Seite mit einem Klick öffne (im zweiten Beispiel), wird die Dasboard-Seite normal geladen und hat eine eigene Navigationsleiste. Jedes Mal, wenn ich die Dashboard-Seite öffne, wenn eine Benutzersitzung gefunden wird (mit dem 1. Weg), wird auf meiner Dashboard-Seite NavigationBar fehlen. Um die Sache noch seltsamer zu machen, wenn ich von der Dasboard-Seite zu einer anderen Seite navigiere (sagen wir Settings) und dann zurück zu Dasboard gehe, wird die Navigationsleiste dann normal auf der Dasboard-Seite funktionieren. Ich habe versucht, den Code zu entfernen, der die Navigationsleiste auf der Anmeldeseite NavigationPage.SetHasNavigationBar(this, false); ausblendet. In diesem Fall wird auf der Anmeldeseite die Navigationsleiste angezeigt. Bei der Navigation zum Dashboard bleibt die Navigationsleiste dieselbe wie bei der Anmeldung Seite.

Ich fragte mich vielleicht, ob das Problem in der Tatsache liegt, dass alle meine Seiten (Login, Dashboard und Einstellungen) Childs von ContentPage sind und stattdessen von NavigationPage erben müssten?

Ich bin wirklich verwirrt darüber, was passiert mit meinem NavigationBar in diesem Moment.

+0

Wie setzen Sie die 'MainPage' App? –

+0

Meinst du meine Anwendungsklasse? –

+0

Ja, wie wird die Anmeldeseite in Ihrer 'Application'-Klasse zuerst angezeigt? Sende diesen Code. –

Antwort

2

Dies liegt daran, dass die Dashboard-Seite aus dem Login-Konstruktor gedrückt wird. Stattdessen überschreiben OnAppearing() und tun es es:

protected override async void OnAppearing() 
{ 
    base.OnAppearing(); 

    await Navigation.PushAsync(new Dashboard()); 
} 

Auch Ihre Kinder Seiten sollte vererben Content als Verschachtelung NavigationPages zu anderen Problemen führen könnte :)

+1

Ihre Lösung funktioniert. Können Sie erklären, warum die Navigationsleiste bei Verwendung des Konstruktors nicht funktioniert? Danke für Ihre Hilfe. –