Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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");
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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>
                    }
                }
            }
        }