Exemple #1
0
        /// <summary>
        /// Clones this XamlTypeFinder.
        /// </summary>
        public virtual XamlTypeFinder Clone()
        {
            XamlTypeFinder copy = new XamlTypeFinder();

            copy.ImportFrom(this);
            return(copy);
        }
 static WpfTypeFinder()
 {
     Instance = new XamlTypeFinder();
     Instance.RegisterAssembly(typeof(MarkupExtension).Assembly);           // WindowsBase
     Instance.RegisterAssembly(typeof(IAddChild).Assembly);                 // PresentationCore
     Instance.RegisterAssembly(typeof(XamlReader).Assembly);                // PresentationFramework
 }
Exemple #3
0
        internal static XamlPropertyInfo GetPropertyInfo(XamlTypeFinder typeFinder, object elementInstance, Type elementType, string xmlNamespace, string localName, bool tryFindAllProperties = false)
        {
            string typeName, propertyName;

            SplitQualifiedIdentifier(localName, out typeName, out propertyName);
            Type propertyType = FindType(typeFinder, xmlNamespace, typeName);

            //Tries to Find All properties, even if they are not attached (For Setters, Bindings, ...)
            if (tryFindAllProperties)
            {
                XamlPropertyInfo propertyInfo = null;
                try
                {
                    propertyInfo = FindProperty(elementInstance, propertyType, propertyName);
                }
                catch (Exception)
                { }
                if (propertyInfo != null)
                {
                    return(propertyInfo);
                }
            }

            if (elementType.IsAssignableFrom(propertyType) || propertyType.IsAssignableFrom(elementType))
            {
                return(FindProperty(elementInstance, propertyType, propertyName));
            }
            else
            {
                // This is an attached property
                return(FindAttachedProperty(propertyType, propertyName));
            }
        }
Exemple #4
0
 /// <summary>
 /// Internal constructor, used by XamlParser.
 /// </summary>
 internal XamlDocument(XmlDocument xmlDoc, XamlParserSettings settings)
 {
     this._xmlDoc                     = xmlDoc;
     this._typeFinder                 = settings.TypeFinder;
     this._serviceProvider            = settings.ServiceProvider;
     this._currentProjectAssemblyName = settings.CurrentProjectAssemblyName;
 }
Exemple #5
0
        static Type FindType(XamlTypeFinder typeFinder, string namespaceUri, string localName)
        {
            Type elementType = typeFinder.GetType(namespaceUri, localName);

            if (elementType == null)
            {
                throw new XamlLoadException("Cannot find type " + localName + " in " + namespaceUri);
            }
            return(elementType);
        }
 static WpfTypeFinder()
 {
     Instance = new XamlTypeFinder();
     Instance.RegisterDesignerNamespaces();
     Instance.RegisterAssembly(typeof(Point).Assembly);                // WindowsBase
     Instance.RegisterAssembly(typeof(IAddChild).Assembly);            // PresentationCore
     Instance.RegisterAssembly(typeof(XamlReader).Assembly);           // PresentationFramework
     Instance.RegisterAssembly(typeof(XamlType).Assembly);             // System.Xaml
     Instance.RegisterAssembly(typeof(Type).Assembly);                 // mscorelib
 }
Exemple #7
0
 /// <summary>
 /// Import information from another XamlTypeFinder.
 /// Use this if you override Clone().
 /// </summary>
 protected void ImportFrom(XamlTypeFinder source)
 {
     if (source == null)
     {
         throw new ArgumentNullException("source");
     }
     foreach (KeyValuePair <string, XamlNamespace> pair in source.namespaces)
     {
         this.namespaces.Add(pair.Key, pair.Value.Clone());
     }
     foreach (KeyValuePair <AssemblyNamespaceMapping, string> pair in source.reverseDict)
     {
         this.reverseDict.Add(pair.Key, pair.Value);
     }
 }
Exemple #8
0
        internal static XamlPropertyInfo GetPropertyInfo(XamlTypeFinder typeFinder, object elementInstance, Type elementType, string xmlNamespace, string localName)
        {
            string typeName, propertyName;

            SplitQualifiedIdentifier(localName, out typeName, out propertyName);
            Type propertyType = FindType(typeFinder, xmlNamespace, typeName);

            if (elementType == propertyType || propertyType.IsAssignableFrom(elementType))
            {
                return(FindProperty(elementInstance, propertyType, propertyName));
            }
            else
            {
                // This is an attached property
                return(FindAttachedProperty(propertyType, propertyName));
            }
        }
 /// <summary>
 /// Internal constructor, used by XamlParser.
 /// </summary>
 internal XamlDocument(XmlDocument xmlDoc, XamlParserSettings settings)
 {
     this._xmlDoc          = xmlDoc;
     this._typeFinder      = settings.TypeFinder;
     this._serviceProvider = settings.ServiceProvider;
 }
Exemple #10
0
 static bool IsElementChildACollectionForProperty(XamlTypeFinder typeFinder, XmlElement element, XamlPropertyInfo propertyInfo)
 {
     return(element.ChildNodes.Count == 1 && propertyInfo.ReturnType.IsAssignableFrom(FindType(typeFinder, element.FirstChild.NamespaceURI, element.FirstChild.LocalName)));
 }
Exemple #11
0
        static XamlPropertyInfo GetPropertyInfo(object elementInstance, Type elementType, XmlAttribute attribute, XamlTypeFinder typeFinder)
        {
            var ret = GetXamlSpecialProperty(attribute);

            if (ret != null)
            {
                return(ret);
            }
            if (attribute.LocalName.Contains("."))
            {
                return(GetPropertyInfo(typeFinder, elementInstance, elementType, GetAttributeNamespace(attribute), attribute.LocalName));
            }
            else
            {
                return(FindProperty(elementInstance, elementType, attribute.LocalName));
            }
        }
        static bool IsElementChildACollectionForProperty(XamlTypeFinder typeFinder, XmlElement element, XamlPropertyInfo propertyInfo)
        {
            var nodes = element.ChildNodes.Cast <XmlNode>().Where(x => !(x is XmlWhitespace)).ToList();

            return(nodes.Count == 1 && propertyInfo.ReturnType.IsAssignableFrom(FindType(typeFinder, nodes[0].NamespaceURI, nodes[0].LocalName)));
        }