2017-11-22 3 views
0

これまで、Pyshical BackButtonを押した後、私のアプリケーションをMainPageに戻したいと思っていました。私はすでにそれをやっているが、問題は私がMainPageにいて、Pyhsical Buttonを押しているときで、どこにも行かないAppを閉じるのではないということだ。 2番目の問題は、ページスタックが2(MainPage> News> NewsDetail)の場合、MainPage(DetailNews> MainPage)に直接移動する場合です。私がしたいことは、previouse Page(DetailNews> News> MainPage>)にポップすることです。ここでオーバライドのための私の完全なコードは、戻るボタンCant戻るXamarinフォームでBackButtonオーバーライドメソッドを作成した後にアプリケーションを終了する

public bool DoBack 
     { 
      get 
      { 
       MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage; 

       if (mainPage != null) 
       { 
        bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented; 

        // we are on a top level page and the Master menu is NOT showing 
        if (!canDoBack) 
        { 
         // don't exit the app just show Dashboard 
         //mainPage.IsPresented = true; 

         Type page = typeof(DrawerPage); 

         mainPage.Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
         return false; 
        } 
        else 
        { 
         return true; 
        } 
       } 
       return true; 
      } 
     } 

私は何を追加するか、それを行うためにここに変更する必要がありますコード、任意の暗示のですか?

答えて

0

イムは、すでにメインページにニュースページでイムその行くが、その後すぐに閉じてメインページ条件のようなその表情はいつもあるときはい、それは閉じることができますが、それに近い、すべてのすべての詳細ページに

protected override bool OnBackButtonPressed() 
      { 
       Device.BeginInvokeOnMainThread(async() => { 
        Application.Current.MainPage = new DrawerPage(); 
       }); 

       return true; 
      } 
1

最初の問題: ロジックが間違っています。あなたがMainPageに滞在したいなら、あなたは真を返す必要があります。

public bool DoBack 
     { 
      get 
      { 
       MasterDetailPage mainPage = App.Current.MainPage as MasterDetailPage; 

       if (mainPage != null) 
       { 
        bool canDoBack = mainPage.Detail.Navigation.NavigationStack.Count > 1 || mainPage.IsPresented; 

        // we are on a top level page and the Master menu is NOT showing 
        if (!canDoBack) 
        { 
         // don't exit the app just show Dashboard 
         //mainPage.IsPresented = true; 

         Type page = typeof(DrawerPage); 

         mainPage.Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
         return true; 
        } 
        else 
        { 
         return false; 
        } 
       } 
       return true; 
      } 
     } 

第二の問題:あなたはPopToRoot代わりのポップを呼び出すため それはDetailsNewsからメインページに直接行く理由があります。このarticleを読んでください。

+0

をOnBackButtonPressedソリューションイムオーバーライドを発見しましたnullなので、else条件を返すことはありません。だから、else条件はすでに正しいです。これはtrueを返さなければなりません。なぜMainPageの私がこの条件を返すことはないのでしょうか?質問 –

+0

私はこれに答えることができません。これはちょっとしたコードです。デバッガを使用し、App.Current.MainPageやその他の部分にあるものを調べることをお勧めします。 –

+0

私のコードをデバッグしていますが、NavigationStack.Countは常にNavigationStackが1のMainPageで、NavigationStackが1 t0oのNewsにナビゲートしているときに問題があります。何が起こるの?なぜNavigationStackは常に1の提案ですか? –

関連する問題