// Token: 0x06004E5D RID: 20061 RVA: 0x00160980 File Offset: 0x0015EB80 private void PrepareHierarchy(object item, ItemsControl parentItemsControl) { DataTemplate dataTemplate = this.HeaderTemplate; if (dataTemplate == null) { DataTemplateSelector headerTemplateSelector = this.HeaderTemplateSelector; if (headerTemplateSelector != null) { dataTemplate = headerTemplateSelector.SelectTemplate(item, this); } if (dataTemplate == null) { dataTemplate = (DataTemplate)FrameworkElement.FindTemplateResourceInternal(this, item, typeof(DataTemplate)); } } HierarchicalDataTemplate hierarchicalDataTemplate = dataTemplate as HierarchicalDataTemplate; if (hierarchicalDataTemplate != null) { bool flag = base.ItemTemplate == parentItemsControl.ItemTemplate; bool flag2 = base.ItemContainerStyle == parentItemsControl.ItemContainerStyle; if (hierarchicalDataTemplate.ItemsSource != null && !base.HasNonDefaultValue(ItemsControl.ItemsSourceProperty)) { base.SetBinding(ItemsControl.ItemsSourceProperty, hierarchicalDataTemplate.ItemsSource); } if (hierarchicalDataTemplate.IsItemStringFormatSet && base.ItemStringFormat == parentItemsControl.ItemStringFormat) { base.ClearValue(ItemsControl.ItemTemplateProperty); base.ClearValue(ItemsControl.ItemTemplateSelectorProperty); base.ClearValue(ItemsControl.ItemStringFormatProperty); bool flag3 = hierarchicalDataTemplate.ItemStringFormat != null; if (flag3) { base.ItemStringFormat = hierarchicalDataTemplate.ItemStringFormat; } } if (hierarchicalDataTemplate.IsItemTemplateSelectorSet && base.ItemTemplateSelector == parentItemsControl.ItemTemplateSelector) { base.ClearValue(ItemsControl.ItemTemplateProperty); base.ClearValue(ItemsControl.ItemTemplateSelectorProperty); bool flag4 = hierarchicalDataTemplate.ItemTemplateSelector != null; if (flag4) { base.ItemTemplateSelector = hierarchicalDataTemplate.ItemTemplateSelector; } } if (hierarchicalDataTemplate.IsItemTemplateSet && flag) { base.ClearValue(ItemsControl.ItemTemplateProperty); bool flag5 = hierarchicalDataTemplate.ItemTemplate != null; if (flag5) { base.ItemTemplate = hierarchicalDataTemplate.ItemTemplate; } } if (hierarchicalDataTemplate.IsItemContainerStyleSelectorSet && base.ItemContainerStyleSelector == parentItemsControl.ItemContainerStyleSelector) { base.ClearValue(ItemsControl.ItemContainerStyleProperty); base.ClearValue(ItemsControl.ItemContainerStyleSelectorProperty); bool flag6 = hierarchicalDataTemplate.ItemContainerStyleSelector != null; if (flag6) { base.ItemContainerStyleSelector = hierarchicalDataTemplate.ItemContainerStyleSelector; } } if (hierarchicalDataTemplate.IsItemContainerStyleSet && flag2) { base.ClearValue(ItemsControl.ItemContainerStyleProperty); bool flag7 = hierarchicalDataTemplate.ItemContainerStyle != null; if (flag7) { base.ItemContainerStyle = hierarchicalDataTemplate.ItemContainerStyle; } } if (hierarchicalDataTemplate.IsAlternationCountSet && base.AlternationCount == parentItemsControl.AlternationCount) { base.ClearValue(ItemsControl.AlternationCountProperty); bool flag8 = true; if (flag8) { base.AlternationCount = hierarchicalDataTemplate.AlternationCount; } } if (hierarchicalDataTemplate.IsItemBindingGroupSet && base.ItemBindingGroup == parentItemsControl.ItemBindingGroup) { base.ClearValue(ItemsControl.ItemBindingGroupProperty); bool flag9 = hierarchicalDataTemplate.ItemBindingGroup != null; if (flag9) { base.ItemBindingGroup = hierarchicalDataTemplate.ItemBindingGroup; } } } }
// As a convenience for hierarchical data, get the header template and // if it's a HierarchicalDataTemplate, set the ItemsSource, ItemTemplate, // ItemTemplateSelector, and ItemStringFormat properties from the template. void PrepareHierarchy(object item, ItemsControl parentItemsControl) { // get the effective header template DataTemplate headerTemplate = HeaderTemplate; if (headerTemplate == null) { DataTemplateSelector selector = HeaderTemplateSelector; if (selector != null) { headerTemplate = selector.SelectTemplate(item, this); } if (headerTemplate == null) { headerTemplate = (DataTemplate)FindTemplateResourceInternal(this, item, typeof(DataTemplate)); } } // if the effective template is a HierarchicalDataTemplate, forward // the special properties HierarchicalDataTemplate hTemplate = headerTemplate as HierarchicalDataTemplate; if (hTemplate != null) { bool templateMatches = (ItemTemplate == parentItemsControl.ItemTemplate); bool containerStyleMatches = (ItemContainerStyle == parentItemsControl.ItemContainerStyle); if (hTemplate.ItemsSource != null && !HasNonDefaultValue(ItemsSourceProperty)) { SetBinding(ItemsSourceProperty, hTemplate.ItemsSource); } if (hTemplate.IsItemStringFormatSet && ItemStringFormat == parentItemsControl.ItemStringFormat) { // if the HDT defines a string format, turn off the // forwarding of ItemTemplate[Selector] (which would get in the way). ClearValue(ItemTemplateProperty); ClearValue(ItemTemplateSelectorProperty); // forward the HDT's string format ClearValue(ItemStringFormatProperty); bool setItemStringFormat = (hTemplate.ItemStringFormat != null); if (setItemStringFormat) { ItemStringFormat = hTemplate.ItemStringFormat; } } if (hTemplate.IsItemTemplateSelectorSet && ItemTemplateSelector == parentItemsControl.ItemTemplateSelector) { // if the HDT defines a template selector, turn off the // forwarding of ItemTemplate (which would get in the way). ClearValue(ItemTemplateProperty); // forward the HDT's template selector ClearValue(ItemTemplateSelectorProperty); bool setItemTemplateSelector = (hTemplate.ItemTemplateSelector != null); if (setItemTemplateSelector) { ItemTemplateSelector = hTemplate.ItemTemplateSelector; } } if (hTemplate.IsItemTemplateSet && templateMatches) { // forward the HDT's template ClearValue(ItemTemplateProperty); bool setItemTemplate = (hTemplate.ItemTemplate != null); if (setItemTemplate) { ItemTemplate = hTemplate.ItemTemplate; } } if (hTemplate.IsItemContainerStyleSelectorSet && ItemContainerStyleSelector == parentItemsControl.ItemContainerStyleSelector) { // if the HDT defines a container-style selector, turn off the // forwarding of ItemContainerStyle (which would get in the way). ClearValue(ItemContainerStyleProperty); // forward the HDT's container-style selector ClearValue(ItemContainerStyleSelectorProperty); bool setItemContainerStyleSelector = (hTemplate.ItemContainerStyleSelector != null); if (setItemContainerStyleSelector) { ItemContainerStyleSelector = hTemplate.ItemContainerStyleSelector; } } if (hTemplate.IsItemContainerStyleSet && containerStyleMatches) { // forward the HDT's container style ClearValue(ItemContainerStyleProperty); bool setItemContainerStyle = (hTemplate.ItemContainerStyle != null); if (setItemContainerStyle) { ItemContainerStyle = hTemplate.ItemContainerStyle; } } if (hTemplate.IsAlternationCountSet && AlternationCount == parentItemsControl.AlternationCount) { // forward the HDT's alternation count ClearValue(AlternationCountProperty); bool setAlternationCount = true; if (setAlternationCount) { AlternationCount = hTemplate.AlternationCount; } } if (hTemplate.IsItemBindingGroupSet && ItemBindingGroup == parentItemsControl.ItemBindingGroup) { // forward the HDT's ItemBindingGroup ClearValue(ItemBindingGroupProperty); bool setItemBindingGroup = (hTemplate.ItemBindingGroup != null); if (setItemBindingGroup) { ItemBindingGroup = hTemplate.ItemBindingGroup; } } } }