2016-05-26 6 views
0

Ich arbeite in Xamarin.forms. Ich erstelle eine Android-Anwendung. In meiner Anwendung muss ich Menü verwenden. Also nahm ich die Master-Detailseite, um die Menüs anzuzeigen. Und es funktioniert gut.Master-Detailseite wird nicht nach Inhaltsseite angezeigt

Aber mein Problem ist, bevor die Master-Detailseite angezeigt wird, muss ich eine Inhaltsseite öffnen, die die Menüs nicht enthält. Also nahm ich eine Inhaltsseite und legte sie fest. Aber wenn ich die Anwendung nach der Inhaltsseite ausführe, wird die Master-Detailseite nicht angezeigt. Der Code wird erfolgreich ausgeführt, aber die Masterseite wird nicht angezeigt.

Kann mir jemand sagen, wie ich die Master-Detailseite nach dem Anzeigen der einfachen Inhaltsseite zeigen kann?

Antwort

0

Ihnen einen Trick geben! Angenommen, Sie haben eine Login-Seite, nach der Authentifizierung gehen Sie zu RootPage, die eine MasterDetailPage ist.

Werfen Sie einen Hauch von von unten Code

namespace LoginNavigation 
{ 
    public class App : Application, IloginInterface 
    { 
     public static App current; 
     public static bool IsUserLoggedIn { get; set; } 
     public static double ScreenWidth; 
     public static double ScreenHeight; 

     public App() { 
      current = this; 
      MainPage = new LoginPageWithStack(); 
     } 

     public void Logout() { 
      MainPage = new LoginPageWithStack(); 
     } 

     public void ShowMainPage() { 
      MainPage = new RootPage(); 
     } 
    } 
} 

rootPage:

namespace LoginNavigation 
{ 
    public class RootPage:MasterDetailPage 
    { 
     MenuPage menuPage; 


     public RootPage() { 
      ToolbarItems.Add(new ToolbarItem("Filter", "ring.png", async() => { 
       var page = new ContentPage(); 
       var result = await page.DisplayAlert("Title", "Message", "Accept", "Cancel"); 
       Debug.WriteLine("success: {0}", result); 
      })); 

      menuPage = new MenuPage(); 

      menuPage.Menu.ItemSelected += (sender, e) => NavigateTo (e.SelectedItem as MenuItemForMaster); 

      //Master = new MasterMenu(); 
      Master = menuPage; 
      Detail = new NavigationPage (new TimeSheet()){ 
       BarBackgroundColor = Color.FromHex("008dce"),BackgroundColor = Color.FromHex("008dce") 
      }; 
     } 

     void NavigateTo (MenuItemForMaster menu) { 
      if (menu == null) 
       return; 

      Page displayPage = (Page)Activator.CreateInstance (menu.TargetType); 
      //Detail = displayPage; 
      Detail = new NavigationPage (displayPage) { BarBackgroundColor = Color.FromHex("008dce"),BackgroundColor = Color.FromHex("008dce")}; 

      menuPage.Menu.SelectedItem = null; 
      IsPresented = false; 
     } 
    } 
} 

Also der Trick ist, die aktuelle Instanz von App-Klasse erhalten und Startseite Eigenschaft davon manipulieren.

+0

Ich habe es versucht, aber immer noch nicht funktioniert. Können Sie bitte den spezifischen Code, den ich in App.cs schreiben sollte, aktualisieren, damit ich auf der Hauptdetailseite nach der Inhaltsseite weitergehen kann. – anand

2

Die Antwort hängt davon ab, ob Sie den Navigationsstapel beibehalten möchten oder nicht. Wenn Sie die neue Seite auf die aktuelle Navigation Stapel hinzufügen möchten, dann müssen Sie so etwas wie dies im Inhalt Seite:

((NavigationPage)Parent).PushAsync(newPage); 

Wenn Sie die neue Seite, die Wurzel des Navigationsstapel machen wollen, dann müssen Sie So etwas zu tun:

((App) Parent).MainPage = newPage; 

Wenn dies nicht funktioniert, geben Sie Ihren Code ein.

+0

Danke Christine, es funktioniert jetzt. Ich habe App.Current.MainPage = newPage; – anand