2016-07-13 13 views
1

私のアプリケーションの出発点となるログインページがあります。私は、ログインページ内の2つの別々の場所でこれを行うXamarinフォームの奇妙なNavigationBarの動作

Navigation.PushAsync(new Dashboard()); 

:私は次のコードを使用して、私のダッシュボードページを起動し、ログインページから

NavigationPage.SetHasNavigationBar(this, false); 

:このページには、次のコードで隠されたナビゲーションバーがあります。最初はログインページのコンストラクタ内にあり、アクティブなユーザセッションをチェックし、2番目はログインのためのボタンクリックを処理するメソッドの内部にあります。

だから私はこのようNavigation.PushAsync()を呼び出す:

第一の方法:

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

第二の方法:

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

そして物事が奇妙に行き始める場所です。ボタンをクリックしてDasboardページを開くと(2番目の例を使用)、Dasboardページは正常にロードされ、独自のNavigationBarがあります。しかし、ユーザーセッションが見つかったときに(1番目の方法で)Dasboardページを開くたびに、DasboardページにNavigationBarが表示されなくなります。物事をさらに奇妙なものにするために、Dasboardページから別のページ(Settingsと言うことができます)までナビゲートし、Dasboardに戻ると、Dasboardページでナビゲーションバーが正常に機能します。ログインページのナビゲーションバーを隠すコードを削除しようとしましたNavigationPage.SetHasNavigationBar(this, false); これはログインページに表示されるナビゲーションバーが表示されますが、ダッシュボードへのナビゲーション(1番目の方法を使用)ではナビゲーションバーはログイン時と同じままですページ。

私のすべてのページ(ログイン、ダッシュボード、設定)が子どものContentPageであり、その代わりにNavigationPageから継承する必要があるかどうかは疑問でしたか?

現時点で私のNavigationBarで起こっていることについて本当に混乱しています。

+0

どのようにアプリケーションの 'MainPage'を設定していますか? –

+0

私のアプリケーションクラスを意味しますか? –

+0

はい、あなたの 'Application'クラスでは、ログインページはどのように最初に表示されますか?そのコードを投稿してください。 –

答えて

2

これは、ダッシュボードページがログインコンストラクタ内からプッシュされているためです。代わりに、OnAppearing()をオーバーライドして、そこにそれを行う:ネスティングNavigationPagesは他の問題につながる可能性があるとしても

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

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

、あなたの子供のページ ContentPageから継承する必要があります:)

+1

あなたのソリューションは機能します。コンストラクタを使用するときにナビゲーションバーが機能しない理由について説明できますか?ご協力ありがとうございました。 –