private void SyncChildrenToRibbonGroupItems() { // Remove all child elements Clear(); ItemToView regenerate = new ItemToView(); // Add a view element for each group item foreach (IRibbonGroupItem item in _ribbonTriple.Items) { ViewBase itemView; // Do we already have a view for this item definition if (_itemToView.ContainsKey(item)) { itemView = _itemToView[item]; // Remove from lookup as we do not want to delete this view _itemToView.Remove(item); } else { // Ask the item definition to return an appropriate view itemView = item.CreateView(_ribbon, _needPaint); } // Update the visible state of the item itemView.Visible = _ribbon.InDesignHelperMode || item.Visible; // We need to keep this association regenerate.Add(item, itemView); Add(itemView); } // When in design time help mode and there is room for another item if (_ribbon.InDesignHelperMode && (Count < 3)) { // Create the design time 'Add Tab' first time it is needed if (_viewAddItem == null) { _viewAddItem = new ViewDrawRibbonDesignGroupTriple(_ribbon, _ribbonTriple, _currentSize, _needPaint); } // Always add at end of the list of items Add(_viewAddItem); } // Dispose of all the items no longer needed foreach (ViewBase view in _itemToView.Values) { view.Dispose(); } // Use the latest hashtable _itemToView = regenerate; }