Пример #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);
                }
            }
        }
        internal static DependencyProperty Resolve(IServiceProvider serviceProvider, string value)
        {
            IAmbientProvider           ambient = (IAmbientProvider)serviceProvider.GetService(typeof(IAmbientProvider));
            IXamlSchemaContextProvider schema  = (IXamlSchemaContextProvider)serviceProvider.GetService(typeof(IXamlSchemaContextProvider));

            // Get the XamlType which represents the <Style> element.
            XamlType styleType = schema.SchemaContext.GetXamlType(typeof(Style));

            // The first ambient value should be the enclosing <Style>.
            Style style = (Style)ambient.GetFirstAmbientValue(styleType);

            // Get the target type for the style from this.
            Type targetType = style.TargetType;

            // And get the dependency property.
            return(DependencyObject.GetPropertyFromName(targetType, value));
        }