//------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ internal void PrepareItemContainer(object item, ItemsControl parentItemsControl) { if (Generator == null) { return; // user-declared GroupItem - ignore ( } // If a GroupItem is being recycled set back IsItemsHost if (_itemsHost != null) { _itemsHost.IsItemsHost = true; } bool isVirtualizingWhenGrouping = (parentItemsControl != null && VirtualizingPanel.GetIsVirtualizingWhenGrouping(parentItemsControl)); // Release any previous containers. Also ensures Items and GroupStyle are hooked up correctly if (Generator != null) { if (!isVirtualizingWhenGrouping) { Generator.Release(); } else { Generator.RemoveAllInternal(true /*saveRecycleQueue*/); } } ItemContainerGenerator generator = Generator.Parent; GroupStyle groupStyle = generator.GroupStyle; // apply the container style Style style = groupStyle.ContainerStyle; // no ContainerStyle set, try ContainerStyleSelector if (style == null) { if (groupStyle.ContainerStyleSelector != null) { style = groupStyle.ContainerStyleSelector.SelectStyle(item, this); } } // apply the style, if found if (style != null) { // verify style is appropriate before applying it if (!style.TargetType.IsInstanceOfType(this)) { throw new InvalidOperationException(SR.Get(SRID.StyleForWrongType, style.TargetType.Name, this.GetType().Name)); } this.Style = style; this.WriteInternalFlag2(InternalFlags2.IsStyleSetFromGenerator, true); } // forward the header template information if (ContentIsItem || !HasNonDefaultValue(ContentProperty)) { this.Content = item; ContentIsItem = true; } if (!HasNonDefaultValue(ContentTemplateProperty)) { this.ContentTemplate = groupStyle.HeaderTemplate; } if (!HasNonDefaultValue(ContentTemplateSelectorProperty)) { this.ContentTemplateSelector = groupStyle.HeaderTemplateSelector; } if (!HasNonDefaultValue(ContentStringFormatProperty)) { this.ContentStringFormat = groupStyle.HeaderStringFormat; } // // Clear previously cached items sizes // Helper.ClearVirtualizingElement(this); // // ItemValueStorage: restore saved values for this item onto the new container // if (isVirtualizingWhenGrouping) { Helper.SetItemValuesOnContainer(parentItemsControl, this, item); if (_expander != null) { Helper.SetItemValuesOnContainer(parentItemsControl, _expander, item); } } }