private void PageTransition(NavigationTransition navigationTransition) { if (Application.Current.RootVisual == null) { return; } PhoneApplicationPage phoneApplicationPage = (PhoneApplicationPage)(((PhoneApplicationFrame)Application.Current.RootVisual)).Content; ITransition transition = null; if (mNextTranistionIsForward) { transition = navigationTransition.Forward.GetTransition(phoneApplicationPage); } else { transition = navigationTransition.Backward.GetTransition(phoneApplicationPage); } transition.Completed += delegate { transition.Stop(); if (TemporaryVisibleScreen != Screen.None) { VisibleScreen = TemporaryVisibleScreen; TemporaryVisibleScreen = Screen.None; PageTransition(Application.Current.Resources["NavigationInTransition"] as NavigationInTransition); } }; transition.Begin(); }
/// <summary> /// 导航。 /// </summary> public void Navigate(Type sourcePageType, object parameter, NavigationTransition navigationTransition) { DispatcherHelper.CheckBeginInvokeOnUI(() => { NavigationTransitionInfo navigationTransitionInfo; switch (navigationTransition) { case NavigationTransition.EntranceNavigationTransition: navigationTransitionInfo = new EntranceNavigationTransitionInfo(); break; case NavigationTransition.DrillInNavigationTransition: navigationTransitionInfo = new DrillInNavigationTransitionInfo(); break; default: navigationTransitionInfo = new SuppressNavigationTransitionInfo(); break; } ((Frame)Window.Current.Content).Navigate(sourcePageType, parameter, navigationTransitionInfo); }); }
public ContentPage GetViewFor <TViewModel>(TViewModel viewModel, NavigationTransition transition) where TViewModel : ANavigableViewModel { var view = (ContentPage)DependencyContainer.Instance.GetInstance( ViewLocatorDictionary[$"{viewModel.GetType().Name}+{transition}"]); view.BindingContext = viewModel; return(view); }
public async Task NavigateToAsync <TViewModel>( TViewModel viewModel, NavigationTransition transition, bool rootChild = false) where TViewModel : ANavigableViewModel { var view = this.viewLocator.GetViewFor(viewModel, transition); await this.NavigationPage.PushAsync((Page)view, true); if (rootChild) { foreach ( var page in this.FormsNavigation.NavigationStack.Take(this.FormsNavigation.NavigationStack.Count - 1) .Skip(1)) { this.FormsNavigation.RemovePage(page); } } }
/// <summary> /// Gets the view type matching the given view model and transition. /// </summary> /// <param name="viewModel"> /// </param> /// <param name="transition"> /// </param> /// <typeparam name="TViewModel"> /// The view model type. /// </typeparam> /// <returns> /// </returns> public Type GetViewTypeFor <TViewModel>(TViewModel viewModel, NavigationTransition transition) where TViewModel : ANavigableViewModel { return(ViewLocatorDictionary[$"{viewModel.GetType().Name}+{transition}"]); }
public void Navigate(Type sourcePageType, object parameter, NavigationTransition navigationTransition) { throw new NotImplementedException(); }
/// <summary> /// Opens the page specified. /// </summary> public async void SetPageState(View view, object data, NavigationTransition navigationTransition) { if (view == ActiveView) { return; } List <Task> transitionTasks = null; SceneObjectView transitionOutView = null; if (ActiveView != null) { transitionOutView = ActiveView; transitionTasks = new List <Task>(); // add transition out task switch (navigationTransition) { case NavigationTransition.Open: transitionTasks.Add(ActiveView.SetState("Closed")); break; case NavigationTransition.Push: transitionTasks.Add(ActiveView.SetState("Pushed")); break; case NavigationTransition.Pop: transitionTasks.Add(ActiveView.SetState("Closed")); break; case NavigationTransition.Close: transitionTasks.Add(ActiveView.SetState("Closed")); break; } } ActiveView = view as SceneObjectView; if (ActiveView != null) { // load/activate view await ActiveView.LoadAsync(); ActiveView.IsActive = true; ActiveView.Setup(data); if (transitionTasks == null) { transitionTasks = new List <Task>(); } // add transition in task switch (navigationTransition) { case NavigationTransition.Push: case NavigationTransition.Open: await ActiveView.SetState("Closed", false); transitionTasks.Add(ActiveView.SetState(DefaultStateName)); break; case NavigationTransition.Pop: await ActiveView.SetState("Pushed", false); transitionTasks.Add(ActiveView.SetState(DefaultStateName)); break; default: case NavigationTransition.Close: break; } } if (transitionTasks != null) { await Task.WhenAll(transitionTasks); } // unload/deactivate views that has transitioned out if (transitionOutView != null && SwitchMode != SwitchMode.Manual) { if (SwitchMode == SwitchMode.Load) { transitionOutView.Unload(); } else { transitionOutView.IsActive = false; } } }