// 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;
                    }
                }
            }
        }
Example #2
0
        // 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;
                    }
                }
            }
        }