public Panel CreateSplitButton(string name, string text, Action <StackedItem> itemsAction)
        {
            var buttonControl = new SplitButtonControl(this, name, text);

            var splitButton = buttonControl.Finish();

            var stackedItem = new StackedItem(nameConvention);

            itemsAction.Invoke(stackedItem);

            var pushButtons = stackedItem
                              .Buttons
                              .Select(x => x.Finish())
                              .Cast <PushButtonData>()
                              .Select(x => splitButton.AddPushButton(x))
                              .ToList();

            splitButton.CurrentButton = pushButtons[stackedItem.GetDefaultButtonIndex()];

            return(this);
        }
        /// <summary>
        /// Create new Stacked items at the panel
        /// </summary>
        /// <param name="action">Action where you must add items to the stacked panel</param>
        /// <returns>Panel where stacked items was created</returns>
        public Panel CreateStackedItems(Action <StackedItem> action)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            var stackedItem = new StackedItem(nameConvention);

            action.Invoke(stackedItem);

            if (stackedItem.ItemsCount < 2 || stackedItem.ItemsCount > 3)
            {
                throw new InvalidOperationException("You must create 2 or three items in the StackedItems");
            }

            RibbonItemData item1 = stackedItem.Buttons[0].Finish();
            RibbonItemData item2 = stackedItem.Buttons[1].Finish();

            IList <RibbonItem> ribbonItems;

            if (stackedItem.ItemsCount == 3)
            {
                RibbonItemData item3 = stackedItem.Buttons[2].Finish();
                ribbonItems = Source.AddStackedItems(item1, item2, item3);
            }
            else
            {
                ribbonItems = Source.AddStackedItems(item1, item2);
            }

            for (var i = 0; i < stackedItem.Buttons.Count; ++i)
            {
                stackedItem.Buttons[i].DoPostProcessing(ribbonItems[i]);
            }

            return(this);
        }