void ISupportInitialize.EndInit() { if (this.propertyName != null) { if (this.TargetName == null) { this.Property = DependencyPropertyConverter.Resolve(this.serviceProvider, this.propertyName); } else { // TargetName is specified so we need to look in the containing template for the named element IAmbientProvider ambient = (IAmbientProvider)this.serviceProvider.GetService(typeof(IAmbientProvider)); IXamlSchemaContextProvider schema = (IXamlSchemaContextProvider)this.serviceProvider.GetService(typeof(IXamlSchemaContextProvider)); // Look up the FrameworkTemplate.Template property in the xaml schema. XamlType frameworkTemplateType = schema.SchemaContext.GetXamlType(typeof(FrameworkTemplate)); XamlMember templateProperty = frameworkTemplateType.GetMember("Template"); // Get the value of the first ambient FrameworkTemplate.Template property. TemplateContent templateContent = (TemplateContent)ambient.GetFirstAmbientValue(new[] { frameworkTemplateType }, templateProperty).Value; // Look in the template for the type of TargetName. Type targetType = templateContent.GetTypeForName(this.TargetName); // Finally, find the dependency property on the type. this.Property = DependencyObject.GetPropertyFromName(targetType, this.propertyName); } } }
// Setters and triggers may have a sourceName which we need to resolve // This only works in templates and it works by looking up the mapping between // name and type in the template. We use ambient lookup to find the Template property // and then query it for the type. private static Type GetTypeFromName(XamlSchemaContext schemaContext, IAmbientProvider ambientProvider, string target) { XamlType frameworkTemplateXType = schemaContext.GetXamlType(typeof(FrameworkTemplate)); XamlMember templateProperty = frameworkTemplateXType.GetMember("Template"); AmbientPropertyValue ambientValue = ambientProvider.GetFirstAmbientValue(new XamlType[] { frameworkTemplateXType }, templateProperty); TemplateContent templateHolder = ambientValue.Value as System.Windows.TemplateContent; if (templateHolder != null) { return(templateHolder.GetTypeForName(target).UnderlyingType); } return(null); }
// Token: 0x0600210D RID: 8461 RVA: 0x00098390 File Offset: 0x00096590 private static Type GetTypeFromName(XamlSchemaContext schemaContext, IAmbientProvider ambientProvider, string target) { XamlType xamlType = schemaContext.GetXamlType(typeof(FrameworkTemplate)); XamlMember member = xamlType.GetMember("Template"); AmbientPropertyValue firstAmbientValue = ambientProvider.GetFirstAmbientValue(new XamlType[] { xamlType }, new XamlMember[] { member }); TemplateContent templateContent = firstAmbientValue.Value as TemplateContent; if (templateContent != null) { return(templateContent.GetTypeForName(target).UnderlyingType); } return(null); }