async Task PushHierarchicalView(BaseNavigationPage mainPage, Page page, ViewTransitionArgs transArgs, object args = null) { if (transArgs == null) { transArgs = new ViewTransitionArgs(); } if (mainPage != null) { var numPages = mainPage.Navigation.NavigationStack.Count; var currentPage = (numPages > 1) ? mainPage.Navigation.NavigationStack[numPages - 1] : mainPage; System.Diagnostics.Debug.WriteLine("number of pages in navigationstack for currentpage: " + currentPage.Navigation.NavigationStack.Count); System.Diagnostics.Debug.WriteLine("number of pages in navigationstack for mainpage: " + mainPage.Navigation.NavigationStack.Count); if (transArgs.IsModal) { await currentPage.Navigation.PushModalAsync(page, transArgs.IsAnimated); } else { await currentPage.Navigation.PushAsync(page, transArgs.IsAnimated); } } else { Application.Current.MainPage = new BaseNavigationPage(page); } }
/// <summary> /// Implements the corresponding method in the INavigationService interface. /// Removes the current page from the stack. /// </summary> /// <param name="transArgs"> to specify if the page is modal </param> public void PopView(ViewTransitionArgs transArgs) { var mainPage = Application.Current.MainPage as BaseNavigationPage; System.Diagnostics.Debug.WriteLine("before pop: #pages in navigationstack: " + mainPage.Navigation.NavigationStack.Count); System.Diagnostics.Debug.WriteLine("before pop: #pages in modalstack: " + mainPage.Navigation.NavigationStack.Count); if (transArgs.IsModal) { mainPage.Navigation.RemovePage(mainPage.Navigation.ModalStack[mainPage.Navigation.ModalStack.Count - 1]); } else { mainPage.Navigation.RemovePage(mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 1]); } }
/// <summary> /// Implements the corresponding method in the INavigationService interface. /// </summary> /// <param name="page"> page to navigate to </param> /// <param name="transArgs"> isModal and isAnimated </param> /// <param name="args"> optional paraters for the page </param> /// <returns></returns> public async Task PushView(Page page, ViewTransitionArgs transArgs, object args = null) { var mainPage = Application.Current.MainPage; if (mainPage == null) { Application.Current.MainPage = new MasterDetailPage(); } if (mainPage is MasterDetailPage) { await PushDetailView(mainPage as MasterDetailPage, page, args); } else if (mainPage is BaseNavigationPage) { await PushHierarchicalView(mainPage as BaseNavigationPage, page, transArgs, args); } }