protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { ItemsControl childItemsControl = element as ItemsControl; if (childItemsControl != null) { // copy templates and styles from this ItemsControl var itemTemplate = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemTemplateProperty); var itemTemplateSelector = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemTemplateSelectorProperty); var itemStringFormat = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemStringFormatProperty); var itemContainerStyle = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemContainerStyleProperty); var itemContainerStyleSelector = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemContainerStyleSelectorProperty); var alternationCount = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.AlternationCountProperty); var itemBindingGroup = RibbonHelper.GetValueAndValueSource(childItemsControl, ItemsControl.ItemBindingGroupProperty); base.PrepareContainerForItemOverride(element, item); // Call this function to work around a restriction of supporting hetrogenous // ItemsCotnrol hierarchy. The method takes care of both ItemsControl and // HeaderedItemsControl (in this case) and assign back the default properties // whereever appropriate. RibbonHelper.IgnoreDPInheritedFromParentItemsControl( childItemsControl, this, itemTemplate, itemTemplateSelector, itemStringFormat, itemContainerStyle, itemContainerStyleSelector, alternationCount, itemBindingGroup, null, null, null); } else { base.PrepareContainerForItemOverride(element, item); } RibbonGroup ribbonGroup = element as RibbonGroup; if (ribbonGroup != null) { ribbonGroup.PrepareRibbonGroup(); } }