public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null) { renderer = XFPlatform.CreateRenderer(bindable); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
void OnDisplayPageModalRequested(object sender, ModalHostPage.DisplayPageModalRequestedEventArgs e) { e.PageToDisplay.Parent = this.Element; IVisualElementRenderer renderer = XFPlatform.GetRenderer(e.PageToDisplay); if (renderer == null) { renderer = XFPlatform.CreateRenderer(e.PageToDisplay); XFPlatform.SetRenderer(e.PageToDisplay, renderer); } // TODO: Now display our modal page. var modalElement = renderer.GetNativeElement(); (Control as FormsLightNavigationPage)?.PushModal(modalElement, true); }
void UpdateRootPage(IReadOnlyList <Page> stack) { Page first = stack.FirstOrDefault(); if (first == _currentRoot) { return; } if (Children.Count > 0) { var renderer = Children[0] as IVisualElementRenderer; if (renderer != null) { Children.RemoveAt(0); var page = renderer.Element as Page; if (page != null) { page.IgnoresContainerArea = false; } if (!stack.Contains(renderer.Element)) { Platform.SetRenderer(renderer.Element, null); } } } _currentRoot = first; if (first == null) { return; } first.IgnoresContainerArea = true; IVisualElementRenderer firstRenderer = Platform.GetRenderer(first); if (firstRenderer == null) { firstRenderer = Platform.CreateRenderer(first); Platform.SetRenderer(first, firstRenderer); } var uiElement = (UIElement)firstRenderer; var platform = Element.Platform as Platform; Canvas canvas = platform?.GetCanvas(); //We could be swapping the visible page, //so let's make sure we remove it if (canvas.Children.Contains(uiElement)) { canvas.Children.Remove(uiElement); } Children.Add(uiElement); // we removed the previous root page, and the new root page is the one being presented // at this time there's only 1 page now on the stack (the navigationpage with root) // we need to update the platform to set this root page as the visible again bool updateRoot = Element.CurrentPage == first && _isRemoving; if (updateRoot) { platform.SetCurrent(Element, false); } }
public static IVisualElementRenderer GetRenderer(VisualElement view) { return(Platform.CreateRenderer(view)); }