Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 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
     });
Beispiel #3
0
        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),
     });
Beispiel #5
0
        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);
        }
Beispiel #7
0
 public RequestDefinition(string fullUri, ShellItem item, ShellSection section, ShellContent content, List <string> globalRoutes) :
     this(new Uri(fullUri, UriKind.Absolute), item, section, content, globalRoutes)
 {
 }