Beispiel #1
0
        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);
        }