Ejemplo n.º 1
0
        async Task PopModalInternal(bool animated)
        {
            TaskCompletionSource <bool> tcs = null;

            if (CurrentModalNavigationTask != null && !CurrentModalNavigationTask.IsCompleted)
            {
                var previousTask = CurrentModalNavigationTask;
                tcs = new TaskCompletionSource <bool>();
                CurrentModalNavigationTask = tcs.Task;
                await previousTask;
            }

            if (animated)
            {
                InternalNaviframe.Pop();
            }
            else
            {
                InternalNaviframe.NavigationStack.LastOrDefault()?.Delete();
            }

            bool shouldWait = animated && (InternalNaviframe.NavigationStack.Count != 0);

            await WaitForCompletion(shouldWait, tcs);
        }
Ejemplo n.º 2
0
        async Task PushModalInternal(Page modal, bool animated)
        {
            TaskCompletionSource <bool> tcs = null;

            if (CurrentModalNavigationTask != null && !CurrentModalNavigationTask.IsCompleted)
            {
                var previousTask = CurrentModalNavigationTask;
                tcs = new TaskCompletionSource <bool>();
                CurrentModalNavigationTask = tcs.Task;
                await previousTask;
            }

            var      after  = InternalNaviframe.NavigationStack.LastOrDefault();
            NaviItem pushed = null;

            if (animated || after == null)
            {
                pushed = InternalNaviframe.Push(Platform.GetOrCreateRenderer(modal).NativeView, modal.Title);
            }
            else
            {
                pushed = InternalNaviframe.InsertAfter(after, Platform.GetOrCreateRenderer(modal).NativeView, modal.Title);
            }
            pushed.TitleBarVisible = false;

            bool shouldWait = animated && after != null;

            await WaitForCompletion(shouldWait, tcs);
        }
Ejemplo n.º 3
0
 protected virtual void Dispose(bool disposing)
 {
     if (_disposed)
     {
         return;
     }
     if (disposing)
     {
         SetPage(null);
         InternalNaviframe.Unrealize();
     }
     _disposed = true;
 }
Ejemplo n.º 4
0
        public void SetPage(Page newRoot)
        {
            if (Page != null)
            {
                var copyOfStack = new List <NaviItem>(InternalNaviframe.NavigationStack);
                for (var i = 0; i < copyOfStack.Count; i++)
                {
                    copyOfStack[i].Delete();
                }
                foreach (Page page in _navModel.Roots)
                {
                    var renderer = GetRenderer(page);
                    (page as IPageController)?.SendDisappearing();
                    renderer?.Dispose();
                }
                _navModel = new NavigationModel();
            }

            if (newRoot == null)
            {
                return;
            }

            _navModel.Push(newRoot, null);

            Page          = newRoot;
            Page.Platform = this;

            IVisualElementRenderer pageRenderer = AttachRenderer(Page);
            var naviItem = InternalNaviframe.Push(pageRenderer.NativeView);

            naviItem.TitleBarVisible = false;

            // Make naviitem transparent if parent window is transparent.
            // Make sure that this is only for _navModel._naviTree. (not for _navModel._modalStack)
            // In addtion, the style of naviItem is only decided before the naviItem pushed into Naviframe. (not on-demand).
            if (HasAlpha)
            {
                naviItem.Style = "default/transparent";
            }

            ((Application)Page.RealParent).NavigationProxy.Inner = this;

            Device.StartTimer(TimeSpan.Zero, () =>
            {
                CurrentPageController?.SendAppearing();
                return(false);
            });
        }