/// <summary> /// /// </summary> /// <param name="targetNode"></param> /// <param name="sourceNode"></param> /// <param name="targetProperty"></param> /// <returns></returns> static ResourceLookupTypes FindResourceLookupType(XmlElement targetNode, XmlElement sourceNode, PropertyInfo targetProperty) { bool canStatic = CanApplyStaticResourceExtension(targetNode, sourceNode); Type type = FindType(targetNode.Name); bool canDynamic = IsDP(type, targetProperty); ResourceLookupTypes value = ResourceLookupTypes.UnSet; if (!canStatic && !canDynamic) { return(ResourceLookupTypes.None); } if (canStatic) { value |= ResourceLookupTypes.Static; } if (canDynamic) { value |= ResourceLookupTypes.Dynamic; } return(value); }
/// <summary> /// /// </summary> /// <param name="lookupTypes"></param> /// <returns></returns> static string ChooseResourceLookupType(ResourceLookupTypes lookupTypes) { if (ResourceLookupTypes.None == lookupTypes) { return(String.Empty); } if (((lookupTypes & ResourceLookupTypes.Dynamic) == ResourceLookupTypes.Dynamic) && ((lookupTypes & ResourceLookupTypes.Static) == ResourceLookupTypes.Static)) { if (WPFXamlGenerator.ShouldThrottle(1, 2)) { return("StaticResource"); } else { return("DynamicResource"); } } if ((lookupTypes & ResourceLookupTypes.Dynamic) == ResourceLookupTypes.Dynamic) { return("DynamicResource"); } if ((lookupTypes & ResourceLookupTypes.Static) == ResourceLookupTypes.Static) { return("StaticResource"); } throw new Exception("TestException"); }
/// <summary> /// /// </summary> /// <param name="attribute"></param> /// <param name="keyValue"></param> /// <param name="targetNode"></param> /// <param name="sourceNode"></param> /// <param name="targetProperty"></param> /// <returns></returns> static bool SetXmlAttributeValue(XmlAttribute attribute, string keyValue, XmlElement targetNode, XmlElement sourceNode, PropertyInfo targetProperty) { ResourceLookupTypes lookupType = FindResourceLookupType(targetNode, sourceNode, targetProperty); string lookupString = ChooseResourceLookupType(lookupType); if (lookupString == String.Empty) { return(false); } attribute.Value = "{" + lookupString + " " + keyValue + "}"; return(true); }
static void ApplyResourceToXaml( XmlDocument xmlDoc, XmlElement sourceNode, string keyValue, TargetNodeToApply pApply, XmlElement targetNode, PropertyInfo targetProperty) { object xmlTarget = null; string cpa = null; bool isPropertySet = IsPropertySet(targetNode, targetProperty, out xmlTarget, out cpa); // // Set a resource reference on a property using attribute or // property element syntax. // if (IsIList(targetProperty.PropertyType)) { // return; } else { if (isPropertySet) { if (xmlTarget is XmlAttribute) { XmlAttribute attribute = (XmlAttribute)xmlTarget; SetXmlAttributeValue(attribute, keyValue, targetNode, sourceNode, targetProperty); } else { // return; } } else { if (WPFXamlGenerator.ShouldThrottle(1, 2)) { XmlAttribute attribute = xmlDoc.CreateAttribute(targetProperty.Name); bool value = SetXmlAttributeValue(attribute, keyValue, targetNode, sourceNode, targetProperty); if (!value) { return; } targetNode.SetAttributeNode(attribute); } else { // <ParentName.PropertyName> ResourceLookupTypes lookupType = FindResourceLookupType(targetNode, sourceNode, targetProperty); string lookupString = ChooseResourceLookupType(lookupType); if (lookupString == String.Empty) { return; } string tagName = targetNode.Name + "." + targetProperty.Name; XmlElement e = (XmlElement)xmlDoc.CreateElement(tagName, targetNode.NamespaceURI); targetNode.PrependChild(e); string typeDSResource = lookupString; XmlElement e2 = (XmlElement)xmlDoc.CreateElement(typeDSResource, AvalonURI); e2.SetAttribute("ResourceKey", keyValue); e.AppendChild(e2); // </ParentName.PropertyName> } } } }