/// <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 }
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)); } }
/// <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; }
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 }
/// <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); } }
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; }
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))); }
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))); }