Beispiel #1
0
        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);
            });
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #5
0
 /// <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();
 }
Beispiel #7
0
        /// <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;
                }
            }
        }