2017-02-20 123 views
0

我有一個內容視圖和左側的導航抽屜,這些抽屜在4個頁面上是公共的,而內容視圖包含4個在4個不同頁面之間導航的圖標。我想保留我的內容視圖並在所有4頁上保留導航抽屜。 我創建一個主詳細信息頁面,並將主頁面設置爲左側導航抽屜,每次更改詳細信息頁面。 我得到了異常,因爲android可以在多個頁面之間導航的同時僅導航頁面。 以下是我Rootpage和內容查看頁面在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]); 

      } 
      } 
    } 

內容查看

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

你應該從細節頁使用Navigation,因爲你設置的詳細信息爲new NavigationPage()

我通常使用下面的代碼geht的INavigation到我的應用程序內導航:

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」,您可以在其中推送新頁面。這樣,用戶可以回溯。我在我的應用程序中更新了我的回答 – Joehl

+0

..每個主頁上有4個不斷放置的4個圖標,用於處理4個主頁之間的導航...和功能類似...您可以通過任何當前頁面點擊各自的圖標..沒有人決定流量..我可以做這樣的導航 – sid