예제 #1
0
        private object Parse(string match, ref string remaining, IServiceProvider serviceProvider)
        {
            IXamlTypeResolver typeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver;

            if (match == "Binding")
            {
                this.markupExtension = new BindingExtension();
            }
            else if (match == "TemplateBinding")
            {
                this.markupExtension = new TemplateBindingExtension();
            }
            else if (match == "StaticResource")
            {
                this.markupExtension = new StaticResourceExtension();
            }
            else if (match == "DynamicResource")
            {
                this.markupExtension = new DynamicResourceExtension();
            }
            else
            {
                if (typeResolver == null)
                {
                    return(null);
                }
                Type type;
                if (!typeResolver.TryResolve(match + "Extension", out type) && !typeResolver.TryResolve(match, out type))
                {
                    IXmlLineInfoProvider lineInfoProvider = serviceProvider.GetService(typeof(IXmlLineInfoProvider)) as IXmlLineInfoProvider;
                    IXmlLineInfo         arg_BF_0;
                    if (lineInfoProvider == null)
                    {
                        IXmlLineInfo xmlLineInfo = new XmlLineInfo();
                        arg_BF_0 = xmlLineInfo;
                    }
                    else
                    {
                        arg_BF_0 = lineInfoProvider.XmlLineInfo;
                    }
                    IXmlLineInfo lineInfo = arg_BF_0;
                    throw new XamlParseException(string.Format("MarkupExtension not found for {0}", new object[]
                    {
                        match
                    }), lineInfo);
                }
                this.markupExtension = (Activator.CreateInstance(type) as IMarkupExtension);
            }
            if (this.markupExtension == null)
            {
                IXmlLineInfoProvider lineInfoProvider2 = serviceProvider.GetService(typeof(IXmlLineInfoProvider)) as IXmlLineInfoProvider;
                IXmlLineInfo         arg_123_0;
                if (lineInfoProvider2 == null)
                {
                    IXmlLineInfo xmlLineInfo = new XmlLineInfo();
                    arg_123_0 = xmlLineInfo;
                }
                else
                {
                    arg_123_0 = lineInfoProvider2.XmlLineInfo;
                }
                IXmlLineInfo lineInfo2 = arg_123_0;
                throw new XamlParseException(string.Format("Missing public default constructor for MarkupExtension {0}", new object[]
                {
                    match
                }), lineInfo2);
            }
            if (remaining == "}")
            {
                return(this.markupExtension);
            }
            char   next;
            string piece;

            while ((piece = GetNextPiece(ref remaining, out next)) != null)
            {
                HandleProperty(piece, serviceProvider, ref remaining, next != '=');
            }
            return(this.markupExtension);
        }