void UpdateMaster()
		{
			ClearMaster();

			FrameworkElement element = null;
			_master = Element.Master;
			if (_master != null)
			{
				_master.PropertyChanged += OnMasterPropertyChanged;

				IVisualElementRenderer renderer = _master.GetOrCreateRenderer();
				element = renderer.ContainerElement;
			}

			Control.Master = element;
			Control.MasterTitle = _master?.Title;
		}
		void UpdateDetail()
		{
			ClearDetail();

			FrameworkElement element = null;

			_detail = Element.Detail;
			if (_detail != null)
			{
				_detail.PropertyChanged += OnDetailPropertyChanged;

				IVisualElementRenderer renderer = _detail.GetOrCreateRenderer();
				element = renderer.ContainerElement;
			}

			Control.Detail = element;
			UpdateDetailTitle();
		}
		void SetMaster(Page masterPage)
		{
			if (_masterRenderer != null)
			{
				FrameworkElement native = _masterRenderer.ContainerElement;
				_container.MasterContent = null;
				_masterRenderer = null;
			}

			if (masterPage == null)
				return;

			_masterRenderer = masterPage.GetOrCreateRenderer();
			_container.MasterContent = _masterRenderer.ContainerElement;
		}
		void SetDetail(Page detailPage)
		{
			((ITitleProvider)this).ShowTitle = detailPage is NavigationPage;

			if (_detailRenderer != null)
			{
				FrameworkElement native = _detailRenderer.ContainerElement;
				_container.DetailContent = null;
				_detailRenderer = null;
			}

			if (detailPage == null)
				return;

			_detailRenderer = detailPage.GetOrCreateRenderer();
			_container.DetailContent = _detailRenderer.ContainerElement;
			UpdateTitle();
		}
示例#5
0
		async void SetCurrent(Page newPage, bool animated, bool popping = false, Action completedCallback = null)
		{
			if (newPage == _currentPage)
				return;

			newPage.Platform = this;

			if (_currentPage != null)
			{
				Page previousPage = _currentPage;
				IVisualElementRenderer previousRenderer = GetRenderer(previousPage);
				_container.Children.Remove(previousRenderer.ContainerElement);

				if (popping)
					previousPage.Cleanup();
			}

			newPage.Layout(new Rectangle(0, 0, _page.ActualWidth, _page.ActualHeight));

			IVisualElementRenderer pageRenderer = newPage.GetOrCreateRenderer();
			_container.Children.Add(pageRenderer.ContainerElement);

			pageRenderer.ContainerElement.Width = _container.ActualWidth;
			pageRenderer.ContainerElement.Height = _container.ActualHeight;

			if (completedCallback != null)
				completedCallback();

			_currentPage = newPage;

			UpdateToolbarTracker();
			UpdateToolbarTitle(newPage);
			await UpdateToolbarItems();
		}
		void SetPage(Page page, bool isAnimated, bool isPopping)
		{
			if (_currentPage != null)
			{
				if (isPopping)
					_currentPage.Cleanup();

				_container.Content = null;

				_currentPage.PropertyChanged -= OnCurrentPagePropertyChanged;
			}

			_previousPage = _currentPage;
			_currentPage = page;

			if (page == null)
				return;

			UpdateBackButton();
			UpdateBackButtonTitle();

			page.PropertyChanged += OnCurrentPagePropertyChanged;

			IVisualElementRenderer renderer = page.GetOrCreateRenderer();

			UpdateNavigationBarVisible();
			UpdateTitleOnParents();

			if (isAnimated && _transition == null)
			{
				_transition = new ContentThemeTransition();
				_container.ContentTransitions = new TransitionCollection();
			}

			if (!isAnimated && _transition != null)
				_container.ContentTransitions.Remove(_transition);
			else if (isAnimated && _container.ContentTransitions.Count == 0)
				_container.ContentTransitions.Add(_transition);

			_container.Content = renderer.ContainerElement;
			_container.DataContext = page;
		}