/// <summary>
        /// Adds ContextPopupItem to items dictionary.
        /// </summary>
        /// <param name="item">Item to add to items dictionary.</param>
        void AddItem(ContextPopupItem item)
        {
            if (_items.ContainsKey(item))
            {
                return;
            }

            EContextPopupItem nativeItem;

            if (string.IsNullOrEmpty(item.Icon))
            {
                nativeItem = _popup.Append(item.Label);
            }
            else
            {
                nativeItem = AppendOrModifyItemWithIcon(item);
            }

            _items.Add(item, nativeItem);

            nativeItem.Selected += (s, e) =>
            {
                SelectedItem = item; // This will invoke SelectedIndexChanged if the index has changed
                ItemSelected?.Invoke(this, EventArgs.Empty);
            };
        }
        /// <summary>
        /// Creates new item with icon.
        /// </summary>
        /// <param name="item">New item to set.</param>
        /// <returns>Item with updated values.</returns>
        EContextPopupItem AppendOrModifyItemWithIcon(ContextPopupItem item)
        {
            EContextPopupItem nativeItem = null;
            EIcon             icon       = new EIcon(_popup);

            icon.StandardIconName = item.Icon;
            if (!string.IsNullOrEmpty(icon.StandardIconName))
            {
                if (!_items.ContainsKey(item))
                {
                    nativeItem = _popup.Append(item.Label, icon);
                }
                else
                {
                    _items[item].SetPartContent("icon", icon);
                }
            }
            else
            {
                //Not a standard icon
                XFPlatformTizen.Native.Image iconImage = new XFPlatformTizen.Native.Image(_popup);
                var task = iconImage.LoadFromImageSourceAsync(item.Icon);
                if (!_items.ContainsKey(item))
                {
                    nativeItem = _popup.Append(item.Label, iconImage);
                }
                else
                {
                    _items[item].SetPartContent("icon", iconImage);
                }
            }

            return(nativeItem);
        }
        public TCContextPopup()
        {
            InitializeComponent();

            _popup = new ContextPopup();
            var item1 = new ContextPopupItem("item 1");
            var item2 = new ContextPopupItem("item 2");

            _popup.Items.Add(item1);
            _popup.Items.Add(item2);

            _popup.ItemSelected += (s, e) =>
            {
                Console.WriteLine($"{_popup.SelectedItem?.Label} is selected");
                label1.Text = _popup.SelectedItem?.Label + " is selected!";
            };

            _popup.Dismissed += (s, e) =>
            {
                if (_popupVisibility)
                {
                    Console.WriteLine("Popup is dismissed");
                    label1.Text      = "Popup is dismissed!";
                    _popupVisibility = false;
                }
            };
        }
 public static void InsertDividerAbove(this ContextPopupItem item)
 {
     if (item == null)
     {
         throw new ArgumentNullException(nameof(item));
     }
     item.SetPartColor(Parts.Menus.Divider, MColors.Current.OnSurfaceColor.WithAlpha(0.12));
 }
 /// <summary>
 /// Updates icon of a given item.
 /// </summary>
 /// <param name="item">Item with a new icon.</param>
 public void UpdateContextPopupItemIcon(ContextPopupItem item)
 {
     if (string.IsNullOrEmpty(item.Icon))
     {
         _items[item]?.SetPartContent("icon", null);
     }
     else
     {
         AppendOrModifyItemWithIcon(item);
     }
 }
        void AddItem(ContextPopupItem item)
        {
            if (_items.ContainsKey(item))
            {
                return;
            }

            EContextPopupItem nativeItem;

            nativeItem = _popup.Append(item.Label);
            _items.Add(item, nativeItem);

            nativeItem.Selected += (s, e) =>
            {
                SelectedItem = item; // This will invoke SelectedIndexChanged if the index has changed
                ItemSelected?.Invoke(this, new SelectedItemChangedEventArgs(SelectedItem));
            };
        }
        /// <summary>
        /// Updates label of a given item.
        /// </summary>
        /// <param name="item">Item with a new label.</param>
        public void UpdateContextPopupItemLabel(ContextPopupItem item)
        {
            EContextPopupItem nativeItem = _items[item];

            nativeItem.SetPartText("default", item.Label);
        }