/// <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; }
/// <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) { 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)); }
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); } }
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 Type FindType(XamlTypeFinder typeFinder, string namespaceUri, string localName) { Type elementType = typeFinder.GetType(namespaceUri, localName); if (elementType == null) elementType = typeFinder.GetType(namespaceUri, localName+"Extension"); if (elementType == null) throw new XamlLoadException("Cannot find type " + localName + " in " + namespaceUri); return elementType; }
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); } }
public void FixtureSetUp() { typeFinder = XamlTypeFinder.CreateWpfTypeFinder(); }
static KordueneTypeFinder() { Instance = new KordueneTypeFinder(); Instance.ImportFrom(XamlTypeFinder.CreateWpfTypeFinder()); Current.Instance.BuildFinished += Instance_BuildFinished; }
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)); }