private static void OnCurrentFilterChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
RibbonGallery gallery = (RibbonGallery)d;
object newFilter = e.NewValue;
Debug.Assert(gallery.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated);
for (int i = 0; i < gallery.Items.Count; i++)
{
RibbonGalleryCategory category;
object dataToCompareAgainst;
// If this item is a RibbonGalleryCategory, then we want to compare against its Header.
// Otherwise compare against the item itself.
if (gallery.Items[i] is RibbonGalleryCategory)
{
category = (RibbonGalleryCategory)gallery.Items[i];
dataToCompareAgainst = category.Header;
}
else
{
category = (RibbonGalleryCategory)gallery.ItemContainerGenerator.ContainerFromIndex(i);
dataToCompareAgainst = gallery.Items[i];
}
// Show the category if the current filter is the "All" filter or dataToCompareAgainst.
if (Object.ReferenceEquals(newFilter, _allFilter) ||
Object.ReferenceEquals(newFilter, dataToCompareAgainst))
{
category.Visibility = Visibility.Visible;
}
else
{
category.Visibility = Visibility.Collapsed;
}
}
gallery.CoerceValue(RibbonGallery.CurrentFilterStyleProperty);
gallery.SetHeaderBindingForCurrentFilterItem();
gallery.CoerceValue(RibbonGallery.CurrentFilterTemplateProperty);
}