以编程方式在 XAML 中查找和替换

Find and replace in XAML programatically

我正在尝试以编程方式 parse/search 某个节点的 XAML 文件,然后修改某个属性。 XAML 是一个 windows 工作流程,因此它不是真正的用户控件。我发现许多使用 XamlReader 解析 Xaml 文件以查找控件然后修改控件的示例。但就我而言,我正在寻找不是 dependancyObjects 的自定义活动。我可以使用 XamlReader 在 windows 工作流 Xaml 中查找自定义活动并修改某些属性吗?或者有更好的解决方案吗?

您不需要使用 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);
    }
}