2017-02-20 120 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