代码之家  ›  专栏  ›  技术社区  ›  user1336827

在XAML中按程序查找和替换

  •  0
  • user1336827  · 技术社区  · 6 年前

    我正在尝试用程序分析/搜索某个节点的XAML文件,然后使用某个属性对其进行修改。XAML是一个Windows工作流,因此它不是真正的用户控件。我发现了许多使用xamlreader解析xaml文件以查找控件,然后修改控件的示例。但在我的例子中,我正在寻找不依赖于对象的自定义活动。是否可以使用XamlReader在Windows工作流XAML中查找自定义活动并修改某些属性?还是有更好的解决方案?

    1 回复  |  直到 6 年前
        1
  •  0
  •   John Vottero    6 年前

    您不需要使用xamlreader,使用xmldocument并遍历元素和属性。

    下面是我们要做的,只需编写“doyourstringreplace”方法:

    private void ParseXml(
        TextWriter resultStream,
        TextReader sourceStream)
    {
        XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = true;
        doc.Load(sourceStream);
        ParseXmlNodes(doc.DocumentElement);
    
        using (XmlWriter xw = XmlWriter.Create(resultStream))
        {
            doc.WriteTo(xw);
        }
    }
    
    /// <summary>
    /// Parse a single XML node and its children.
    /// </summary>
    /// <param name="node"></param>
    private void ParseXmlNodes(XmlNode node)
    {
        if (node.NodeType == XmlNodeType.Element)
        {
            //
            //  Replace tokens in XML attribute values
            //
            foreach (XmlAttribute a in node.Attributes)
            {
                a.Value = DoYourStringReplace(a.Value);
            }
        }
        else if (node.NodeType == XmlNodeType.Text)
        {
            //
            //  Replace tokens in the XML Element value
            //
            node.Value = DoYourStringReplace(node.Value);
        }
    
        //
        //  Do the same thing for all children
        //
        foreach (XmlNode child in node.ChildNodes)
        {
            ParseXmlNodes(child);
        }
    }