2017-02-20 2 views
0

コンテンツビューと左のナビゲーションドロワーは4ページに共通で、コンテンツビューには4つの異なるページ間をナビゲートする4つのアイコンがあります。コンテンツの表示を保持し、ナビゲーション・ドロワーを4ページすべてに残したい。 マスター詳細ページを作成し、マスターページを左ナビゲーションドロワーに設定し、毎回詳細ページを変更しています。 アンドロイドは複数のページ間を移動する際に一度にページを移動できるため、例外が発生しました。続き あなたがnew NavigationPage()などの詳細を設定するので、あなたは、詳細ページからNavigationを使用する必要があり、私のRootpageとContentViewページXamarin.formsの複数のページ間を移動しますか?

public class RootPage : MasterDetailPage 
    { 
     LeftNavigationPanel menuPage; 
     public RootPage(string detailSel) 
     { 
      menuPage = new LeftNavigationPanel(); //This is the left navigation class. rename later. 
      Master = menuPage; 
      if (detailSel.Equals("")) 
      { 

       var detail = new NavigationPage(new Tabpage()); 
       Detail = detail; //homepage 
       detail.Icon = "leftnav.png"; 
       App.navigation = detail.Navigation; 
      } 
      else if (detailSel.Equals("1")) 
      { 

       var detail = new NavigationPage(new Post()); 
       Detail = detail; //homepage 
       detail.Icon = "leftnav.png"; 
       App.navigation = detail.Navigation; 
      // System.Diagnostics.Debug.WriteLine("page1: " + Navigation.NavigationStack[Navigation.NavigationStack.Count-1]); 

      } 
      else if (detailSel.Equals("2")) 
      { 
       var detail = new NavigationPage(new TrackTabPage()); 
       Detail = detail; //homepage 
       detail.Icon = "leftnav.png"; 
       App.navigation = detail.Navigation; 
       // System.Diagnostics.Debug.WriteLine("page1: " + Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]); 

      } 
      } 
    } 

ContentView

public partial class HomeContentView : ContentView 
    { 
     public HomeContentView() 
     { 
      InitializeComponent(); 
     } 
     private async void read_click(Object sender, EventArgs e) 
     { 
      if (!((Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]) is Tabpage)) 
      { 

       //await Navigation.PopAsync(); 
       await Navigation.PushAsync(new RootPage("")); 
       // this.Navigation.PopAsync(); 
      } 
     } 
     private async void post_click(Object sender, EventArgs e) 
     { 
      if (!((Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]) is Post)) 
      { 
       System.Diagnostics.Debug.WriteLine("page: "+ Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]); 
       // await Navigation.PopAsync(); 
       await Navigation.PushAsync(new RootPage("1")); 


      } 
     } 
     private async void track_click(Object sender, EventArgs e) 
     { 
      if (!((Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]) is TrackTabPage)) 
      { 
       System.Diagnostics.Debug.WriteLine("page: " + Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]); 
       // await Navigation.PopAsync(); 
       await Navigation.PushAsync(new RootPage("2")); 
      } 
     } 
     private void play_click(Object sender, EventArgs e) { } 
    } 

答えて

0

です。

私は通常私のアプリ内を移動するINavigationをgehtするには、次のコードを使用します。

public static INavigation GetNavigation() 
{ 
    var mdp = Application.Current.MainPage as MasterDetailPage; 
    if (mdp != null) 
    { 
     // Return the navigation of the detail-page 
     return mdp.Detail.Navigation; 
    } 

    var np = Application.Current.MainPage as NavigationPage; 
    if (np != null) 
    { 
     // Page is no MasterDetail-Page, but has a navigation 
     return np.Navigation; 
    } 

    // No navigation found (just set the page, instead of navigation) 
    return null; 
} 

そして、次の例のようにそれを使用します。

var nav = GetNavigation(); 
if(nav != null) 
{ 
    await nav.PushAsync(new Tabpage()); 
} 
else 
{ 
    // Just set the page, because there is no navigation 
    Application.Current.MainPage = new new Tabpage(); 

    // Or like this 
    Application.Current.MainPage = new NavigationPage(new Tabpage()); 
} 

更新

私が変更私の答えは少し(コメントのおかげで、私はこれを実現していない)。ページを変更するのにnew Rootpage("")を使用しないでください。これで、現在のナビゲーションの上に新しいナビゲーションが作成されます。それは理にかなっていません。

ちょうどPushあなたのページは現在のナビゲーションにGetNavigation()で表示されます。

詳細については、Xamarin.Formsのdocumentation about the navigation patternをお読みください。

+0

ルートページのコンストラクタではどうすればよいですか?私はそれをそのまま保つことができますか? – sid

+0

これは、アプリ内でどのようにナビゲートするかによって異なります。 「通常の」ケースでは、新しいページをプッシュする「NavigationPage」が1つあります。これにより、ユーザーは後方にナビゲートできます。私の答えを更新しました – Joehl

+0

私のアプリで..各メイン4ページに4つのアイコンが4つのメインページ間のナビゲーションを世話する常に配置されている...と機能は..あなたは現在のページから任意のページに行くことができますそれぞれのアイコンをクリックします。誰も決まった流れはありません。どうすればこのようなナビゲーションをすることができますか? – sid

関連する問題