| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | using System;using Xamarin.Forms;using Xamarin.Forms.Platform.iOS;using UIKit;using System.Linq;using CoreGraphics;using System.Collections.Generic;using System.Windows.Input;// [assembly: Xamarin.Forms.ExportRenderer(typeof(ContentPage), typeof(InABox.Mobile.DropDownMenuRenderer))]namespace InABox.Mobile{    public class DropDownMenuRenderer : PageRenderer    {        //I used UITableView for showing the menulist of secondary toolbar items.        List<ToolbarItem> _secondaryItems;        UITableView table;        protected override void OnElementChanged(VisualElementChangedEventArgs e)        {            //Get all secondary toolbar items and fill it to the gloabal list variable and remove from the content page.            if (e.NewElement is ContentPage page)            {                _secondaryItems = page.ToolbarItems.Where(i => i.Order == ToolbarItemOrder.Secondary).ToList();                _secondaryItems.ForEach(t => page.ToolbarItems.Remove(t));            }            base.OnElementChanged(e);        }        public override void ViewWillAppear(bool animated)        {            var element = (ContentPage)Element;            //If global secondary toolbar items are not null, I created and added a primary toolbar item with image(Overflow) I                     // want to show.            if (_secondaryItems != null && _secondaryItems.Count > 0)            {                element.ToolbarItems.Clear();                element.ToolbarItems.Add(new ToolbarItem()                {                    Order = ToolbarItemOrder.Primary,                    Text = "Tools",                    //Icon = "more.png",                    Priority = 1,                    Command = new Command(() =>                    {                        ToolClicked();                    })                });            }            base.ViewWillAppear(animated);        }        //Create a table instance and added it to the view.        private void ToolClicked()        {            if (table == null)            {                var items = _secondaryItems.Where(x => (!(x is HideableToolbarItem)) || (((HideableToolbarItem)x).IsVisible)).ToList();                //Set the table position to right side. and set height to the content height.                var childRect = new CGRect((float)View.Bounds.Width - 250, 0, 250, items.Count() * 56);                table = new UITableView(childRect)                {                    Source = new DropDownMenuSource(items)                 };                Add(table);                return;            }            foreach (var subview in View.Subviews)            {                if (subview == table)                {                    table.RemoveFromSuperview();                    return;                }            }            Add(table);        }    }}
 |