Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        static void ScanSingleInstance(ResourceSourceNode resourceSourceNode, XmlElement targetNode, XmlElement resourceElement)
        {
            XmlElement gradparentNode = resourceElement.ParentNode.ParentNode as XmlElement;

            if (IsInvalid(gradparentNode, resourceElement, targetNode))
            {
                return;
            }

            PropertyInfo[] properties = null;

            properties = GetPropertiesWherePossibleToApply(resourceElement, targetNode);

            if (properties != null && properties.Length > 0)
            {
                TargetNodeToApply toApply = new TargetNodeToApply(targetNode, properties);

                resourceSourceNode.Properties.Add(toApply);
            }
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <param name="listAll"></param>
        static void ScanForResources(XmlDocument xmlDoc, List <ResourceSourceNode> listAll)
        {
            XmlElement xmlRoot = xmlDoc.DocumentElement;

            NameTable table = new NameTable();

            XmlNamespaceManager mngr = new XmlNamespaceManager(table);

            mngr.AddNamespace("x", XamlURI);
            XmlNodeList listResourceNodex = xmlDoc.SelectNodes("//*[@x:Key]", mngr);

            foreach (XmlNode resourceNode in listResourceNodex)
            {
                if (WPFXamlGenerator.ShouldThrottle(1, 2))
                {
                    continue;
                }

                XmlElement resourceElement = (XmlElement)resourceNode;

                string             keyName = resourceElement.GetAttribute(KeyName, XamlURI);
                ResourceSourceNode bag     = new ResourceSourceNode(resourceElement);
                bag.Key = keyName;

                SetShareableState(bag, resourceElement);

                // Validates that the parent on the resource XML Node
                // is Foo.Resources collection.

                if (resourceElement.ParentNode.Name.IndexOf(".Resource") != -1)
                {
                    // Getting the grandparent for the assumption that of we are under Foo.Resources
                    // and properties can be applied to the GrandParent node.
                    //  <TextBox>                               <=== GrandParent
                    //      <TextBox.Resources>
                    //          <SolidColorBrush Color="Red" /> <=== ResourceElement
                    //      </TextBox.Resources>
                    //      <Button />                          <=== TargetNode
                    //  </TextBox>
                    //

                    XmlElement  gradparentNode     = resourceElement.ParentNode.ParentNode as XmlElement;
                    XmlNodeList descendatNodesList = gradparentNode.SelectNodes("descendant::*");

                    // First scan the grandparent node to find properties.
                    ScanSingleInstance(bag, gradparentNode, resourceElement);

                    // Now we scan all the descendents of the grandparent node.
                    foreach (XmlNode node in descendatNodesList)
                    {
                        XmlElement targetNode = node as XmlElement;
                        ScanSingleInstance(bag, targetNode, resourceElement);
                    }
                }

                if (bag.Properties.Count > 0)
                {
                    listAll.Add(bag);
                }
            }
        }
Exemple #3
0
 static void SetShareableState(ResourceSourceNode rsNode, XmlElement resourceElement)
 {
     rsNode.XShared = GetXSharedXmlNodeValue(resourceElement);
 }