// Token: 0x06000690 RID: 1680 RVA: 0x00014744 File Offset: 0x00012944 private void Seal() { if (this._type == null && this._text == null) { throw new InvalidOperationException(SR.Get("NullTypeIllegal")); } if (this._firstChild != null && !typeof(IAddChild).IsAssignableFrom(this._type)) { throw new InvalidOperationException(SR.Get("TypeMustImplementIAddChild", new object[] { this._type.Name })); } this.ApplyAutoAliasRules(); if (this._childName != null && this._childName != string.Empty) { if (!this.IsChildNameValid(this._childName)) { throw new InvalidOperationException(SR.Get("ChildNameNamePatternReserved", new object[] { this._childName })); } this._childName = string.Intern(this._childName); } else { this._childName = this.GenerateChildName(); } object synchronized = this._synchronized; lock (synchronized) { for (int i = 0; i < this.PropertyValues.Count; i++) { PropertyValue propertyValue = this.PropertyValues[i]; propertyValue.ChildName = this._childName; StyleHelper.SealIfSealable(propertyValue.ValueInternal); this.PropertyValues[i] = propertyValue; } } this._sealed = true; if (this._childName != null && this._childName != string.Empty && this._frameworkTemplate != null) { this._childIndex = StyleHelper.CreateChildIndexFromChildName(this._childName, this._frameworkTemplate); } for (FrameworkElementFactory frameworkElementFactory = this._firstChild; frameworkElementFactory != null; frameworkElementFactory = frameworkElementFactory._nextSibling) { if (this._frameworkTemplate != null) { frameworkElementFactory.Seal(this._frameworkTemplate); } } }
// =========================================================================== // These methods are invoked when a Style/Template is Sealed // =========================================================================== #region WriteMethods // // This method // 1. Seals a template // internal static void SealTemplate( FrameworkTemplate frameworkTemplate, ref bool isSealed, FrameworkElementFactory templateRoot, TriggerCollection triggers, ResourceDictionary resources, HybridDictionary childIndexFromChildID, ref FrugalStructList<ChildRecord> childRecordFromChildIndex, ref FrugalStructList<ItemStructMap<TriggerSourceRecord>> triggerSourceRecordFromChildIndex, ref FrugalStructList<ContainerDependent> containerDependents, ref FrugalStructList<ChildPropertyDependent> resourceDependents, ref ItemStructList<ChildEventDependent> eventDependents, ref HybridDictionary triggerActions, ref HybridDictionary dataTriggerRecordFromBinding, ref bool hasInstanceValues, ref EventHandlersStore eventHandlersStore) { Debug.Assert(frameworkTemplate != null ); // This template has already been sealed. // There is no more to do. if (isSealed) { return; } // Seal template nodes (if exists) if (frameworkTemplate != null) { frameworkTemplate.ProcessTemplateBeforeSeal(); } if (templateRoot != null) { Debug.Assert( !frameworkTemplate.HasXamlNodeContent ); // Seal the template Debug.Assert(frameworkTemplate != null); //frameworkTemplate.ProcessTemplateBeforeSeal(); templateRoot.Seal(frameworkTemplate); } // Seal triggers if (triggers != null) { triggers.Seal(); } // Seal Resource Dictionary if (resources != null) { resources.IsReadOnly = true; } // Build shared tables if (templateRoot != null) { // This is a FEF-style template. Process the root node, and it will // recurse through the rest of the FEF tree. StyleHelper.ProcessTemplateContentFromFEF( templateRoot, ref childRecordFromChildIndex, ref triggerSourceRecordFromChildIndex, ref resourceDependents, ref eventDependents, ref dataTriggerRecordFromBinding, childIndexFromChildID, ref hasInstanceValues); } // Process Triggers. (Trigger PropertyValues are inserted // last into the Style/Template GetValue chain because they // are the highest priority) bool hasHandler = false; Debug.Assert( frameworkTemplate != null ); StyleHelper.ProcessTemplateTriggers( triggers, frameworkTemplate, ref childRecordFromChildIndex, ref triggerSourceRecordFromChildIndex, ref containerDependents, ref resourceDependents, ref eventDependents, ref dataTriggerRecordFromBinding, childIndexFromChildID, ref hasInstanceValues, ref triggerActions, templateRoot, ref eventHandlersStore, ref frameworkTemplate.PropertyTriggersWithActions, ref frameworkTemplate.DataTriggersWithActions, ref hasHandler ); frameworkTemplate.HasLoadedChangeHandler = hasHandler; frameworkTemplate.SetResourceReferenceState(); // All done, seal self and call it a day. isSealed = true; // Remove thread affinity so it can be accessed across threads frameworkTemplate.DetachFromDispatcher(); // Check if the template has the Template property set on the container via its visual triggers. // It is an error to specify the TemplateProperty in your own Template. if (StyleHelper.IsSetOnContainer(Control.TemplateProperty, ref containerDependents, true) || StyleHelper.IsSetOnContainer(ContentPresenter.TemplateProperty, ref containerDependents, true)) { throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInTemplate, Control.TemplateProperty.Name)); } // Check if the template has the Style property set on the container via its visual triggers. // It is an error to specify the StyleProperty in your own Template. if (StyleHelper.IsSetOnContainer(FrameworkElement.StyleProperty, ref containerDependents, true)) { throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInTemplate, FrameworkElement.StyleProperty.Name)); } // Check if the template has the DefaultStyleKey property set on the container via its visual triggers. // It is an error to specify the DefaultStyleKeyProperty in your own Template. if (StyleHelper.IsSetOnContainer(FrameworkElement.DefaultStyleKeyProperty, ref containerDependents, true)) { throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInTemplate, FrameworkElement.DefaultStyleKeyProperty.Name)); } // Check if the template has the OverridesDefaultStyle property set on the container via its visual triggers. // It is an error to specify the OverridesDefaultStyleProperty in your own Template. if (StyleHelper.IsSetOnContainer(FrameworkElement.OverridesDefaultStyleProperty, ref containerDependents, true)) { throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInTemplate, FrameworkElement.OverridesDefaultStyleProperty.Name)); } // Check if the template has the Name property set on the container via its visual triggers. // It is an error to specify the Name in your own Template. if (StyleHelper.IsSetOnContainer(FrameworkElement.NameProperty, ref containerDependents, true)) { throw new InvalidOperationException(SR.Get(SRID.CannotHavePropertyInTemplate, FrameworkElement.NameProperty.Name)); } }