/// <summary> /// Default constructor /// </summary> public RibbonGroupBox() { this.ToolTip = new ToolTip(); ((ToolTip)this.ToolTip).Template = null; this.CoerceValue(ContextMenuProperty); this.Focusable = false; this.Loaded += this.OnLoaded; this.Unloaded += this.OnUnloaded; this.updateChildSizesItemContainerGeneratorAction = new ItemContainerGeneratorAction(this.ItemContainerGenerator, this.UpdateChildSizes); }
private void Refresh() { if (this.needsRefresh == false) { return; } this.needsRefresh = false; if (this.itemContainerGeneratorAction == null) { this.itemContainerGeneratorAction = new ItemContainerGeneratorAction((ItemContainerGenerator)this.ItemContainerGenerator, this.Refresh); } // Clear currently used group containers // and supply with new generated ones foreach (var galleryGroupContainer in this.galleryGroupContainers) { BindingOperations.ClearAllBindings(galleryGroupContainer); this.visualCollection.Remove(galleryGroupContainer); } this.galleryGroupContainers.Clear(); // Gets filters var filter = this.Filter?.Split(','); var dictionary = new Dictionary<string, GalleryGroupContainer>(); foreach (UIElement item in this.InternalChildren) { if (item == null) { continue; } // Resolve group name string propertyValue = null; if (this.GroupByAdvanced == null) { propertyValue = this.ItemContainerGenerator == null ? this.GetPropertyValueAsString(item) : this.GetPropertyValueAsString(this.ItemContainerGenerator.GetItemContainerGeneratorForPanel(this).ItemFromContainer(item)); } else { propertyValue = this.ItemContainerGenerator == null ? this.GroupByAdvanced(item) : this.GroupByAdvanced(this.ItemContainerGenerator.GetItemContainerGeneratorForPanel(this).ItemFromContainer(item)); } if (propertyValue == null) { propertyValue = "Undefined"; } // Make invisible if it is not in filter if (this.IsGrouped && filter != null && filter.Contains(propertyValue) == false) { item.Visibility = Visibility.Collapsed; continue; } // Make all not filtered items visible item.Visibility = Visibility.Visible; // To put all items in one group in case of IsGrouped = False if (this.IsGrouped == false) { propertyValue = "Undefined"; } if (dictionary.ContainsKey(propertyValue) == false) { var galleryGroupContainer = new GalleryGroupContainer { Header = propertyValue }; RibbonControl.Bind(this, galleryGroupContainer, "GroupStyle", GroupStyleProperty, BindingMode.OneWay); RibbonControl.Bind(this, galleryGroupContainer, "Orientation", GalleryGroupContainer.OrientationProperty, BindingMode.OneWay); RibbonControl.Bind(this, galleryGroupContainer, "ItemWidth", GalleryGroupContainer.ItemWidthProperty, BindingMode.OneWay); RibbonControl.Bind(this, galleryGroupContainer, "ItemHeight", GalleryGroupContainer.ItemHeightProperty, BindingMode.OneWay); RibbonControl.Bind(this, galleryGroupContainer, "MaxItemsInRow", GalleryGroupContainer.MaxItemsInRowProperty, BindingMode.OneWay); RibbonControl.Bind(this, galleryGroupContainer, "MinItemsInRow", GalleryGroupContainer.MinItemsInRowProperty, BindingMode.OneWay); dictionary.Add(propertyValue, galleryGroupContainer); this.galleryGroupContainers.Add(galleryGroupContainer); this.visualCollection.Add(galleryGroupContainer); } dictionary[propertyValue].Items.Add(new GalleryItemPlaceholder(item)); } if ((this.IsGrouped == false || (this.GroupBy == null && this.GroupByAdvanced == null)) && this.galleryGroupContainers.Count != 0) { // Make it without headers this.galleryGroupContainers[0].IsHeadered = false; } this.InvalidateMeasure(); }