/// <summary> /// Called when the container is being attached to the parent ItemsControl /// </summary> /// <param name="element"></param> /// <param name="item"></param> protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { RibbonGalleryItem galleryItem = (RibbonGalleryItem)element; galleryItem.RibbonGalleryCategory = this; RibbonGallery gallery = RibbonGallery; if (gallery != null) { object selectedItem = gallery.SelectedItem; if (selectedItem != null) { // Set IsSelected to true on GalleryItems that match the SelectedItem if (RibbonGallery.VerifyEqual(item, selectedItem)) { galleryItem.IsSelected = true; } } else if (galleryItem.IsSelected) { // If a GalleryItem is marked IsSelected true then synchronize SelectedItem with it gallery.SelectedItem = item; } else { object selectedValue = gallery.SelectedValue; if (selectedValue != null) { // Set SelectedItem if the item's value matches the SelectedValue object itemValue = gallery.GetSelectableValueFromItem(item); if (RibbonGallery.VerifyEqual(selectedValue, itemValue)) { galleryItem.IsSelected = true; } } } } galleryItem.SyncKeyTipAndContent(); base.PrepareContainerForItemOverride(element, item); }
/// <summary> /// This method is invoked when the Items property changes. /// </summary> protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Remove: case NotifyCollectionChangedAction.Replace: if (RibbonGallery != null) { object selectedItem = RibbonGallery.SelectedItem; object highlightedItem = RibbonGallery.HighlightedItem; if (selectedItem != null || highlightedItem != null) { for (int i = 0; i < e.OldItems.Count; i++) { if (selectedItem != null && RibbonGallery.VerifyEqual(selectedItem, e.OldItems[i])) { // Synchronize SelectedItem if it is one of // the items being removed or replaced. RibbonGallery.ForceCoerceSelectedItem(); break; } if (highlightedItem != null && RibbonGallery.VerifyEqual(highlightedItem, e.OldItems[i])) { // Synchronize HighlightedItem if it is one of // the items being removed or replaced. RibbonGallery.ForceCoerceHighlightedItem(); break; } } } RibbonGallery.IsMaxColumnWidthValid = false; } break; case NotifyCollectionChangedAction.Reset: if (RibbonGallery != null) { if (RibbonGallery.SelectedItem != null) { // Synchronize SelectedItem after a Reset operation. RibbonGallery.ForceCoerceSelectedItem(); } if (RibbonGallery.HighlightedItem != null) { // Synchronize HighlightedItem after a Reset operation. RibbonGallery.ForceCoerceHighlightedItem(); } RibbonGallery.IsMaxColumnWidthValid = false; } break; case NotifyCollectionChangedAction.Add: if (RibbonGallery != null) { RibbonGallery.IsMaxColumnWidthValid = false; } break; case NotifyCollectionChangedAction.Move: break; } }