public virtual void AddChild(XF.Element child, int physicalSiblingIndex) { if (child is null) { throw new ArgumentNullException(nameof(child)); } XF.ShellItem itemToAdd = child switch { XF.TemplatedPage childAsTemplatedPage => childAsTemplatedPage, // Implicit conversion XF.ShellContent childAsShellContent => childAsShellContent, // Implicit conversion XF.ShellSection childAsShellSection => childAsShellSection, // Implicit conversion XF.MenuItem childAsMenuItem => childAsMenuItem, // Implicit conversion XF.ShellItem childAsShellItem => childAsShellItem, _ => throw new NotSupportedException($"Handler of type '{GetType().FullName}' representing element type '{TargetElement?.GetType().FullName ?? "<null>"}' doesn't support adding a child (child type is '{child.GetType().FullName}').") }; if (ShellControl.Items.Count >= physicalSiblingIndex) { ShellControl.Items.Insert(physicalSiblingIndex, itemToAdd); } else { Debug.WriteLine($"WARNING: {nameof(AddChild)} called with {nameof(physicalSiblingIndex)}={physicalSiblingIndex}, but ShellControl.Items.Count={ShellControl.Items.Count}"); ShellControl.Items.Add(itemToAdd); } }
private XF.ShellItem GetItemForElement(XF.Element child) { return(child switch { XF.TemplatedPage childAsTemplatedPage => GetItemForTemplatedPage(childAsTemplatedPage), XF.ShellContent childAsShellContent => GetItemForContent(childAsShellContent), XF.ShellSection childAsShellSection => GetItemForSection(childAsShellSection), XF.MenuItem childAsMenuItem => GetItemForMenuItem(childAsMenuItem), XF.ShellItem childAsShellItem => childAsShellItem, _ => null });
private static bool IsShellItemWithMenuItem(XF.ShellItem shellItem, XF.MenuItem menuItem) { // Xamarin.Forms.MenuShellItem is internal so we have to use reflection to check that // its MenuItem property is the same as the MenuItem we're looking for. if (!MenuShellItemType.IsAssignableFrom(shellItem.GetType())) { return(false); } var menuItemInMenuShellItem = MenuShellItemMenuItemProperty.GetValue(shellItem); return(menuItemInMenuShellItem == menuItem); }
private static ElementHandler CreateHandler(XF.Element parent, MobileBlazorBindingsRenderer renderer) { return(parent switch { XF.ContentPage contentPage => new ContentPageHandler(renderer, contentPage), XF.ContentView contentView => new ContentViewHandler(renderer, contentView), XF.Label label => new LabelHandler(renderer, label), XF.FlyoutPage flyoutPage => new FlyoutPageHandler(renderer, flyoutPage), XF.ScrollView scrollView => new ScrollViewHandler(renderer, scrollView), XF.ShellContent shellContent => new ShellContentHandler(renderer, shellContent), XF.Shell shell => new ShellHandler(renderer, shell), XF.ShellItem shellItem => new ShellItemHandler(renderer, shellItem), XF.ShellSection shellSection => new ShellSectionHandler(renderer, shellSection), XF.TabbedPage tabbedPage => new TabbedPageHandler(renderer, tabbedPage), _ => new ElementHandler(renderer, parent), });
public virtual void RemoveChild(XF.Element child) { if (child is null) { throw new ArgumentNullException(nameof(child)); } var itemToRemove = child switch { XF.TemplatedPage childAsTemplatedPage => GetItemForTemplatedPage(childAsTemplatedPage), XF.ShellContent childAsShellContent => GetItemForContent(childAsShellContent), XF.ShellSection childAsShellSection => GetItemForSection(childAsShellSection), XF.MenuItem childAsMenuItem => GetItemForMenuItem(childAsMenuItem), XF.ShellItem childAsShellItem => childAsShellItem, _ => throw new NotSupportedException($"Handler of type '{GetType().FullName}' representing element type '{TargetElement?.GetType().FullName ?? "<null>"}' doesn't support removing a child (child type is '{child.GetType().FullName}').") }; ShellControl.Items.Remove(itemToRemove); }
public ShellItemHandler(NativeComponentRenderer renderer, XF.ShellItem shellItemControl) : base(renderer, shellItemControl) { ShellItemControl = shellItemControl ?? throw new ArgumentNullException(nameof(shellItemControl)); Initialize(renderer); }
public RequestDefinition(string fullUri, ShellItem item, ShellSection section, ShellContent content, List <string> globalRoutes) : this(new Uri(fullUri, UriKind.Absolute), item, section, content, globalRoutes) { }