2

我可以轻松地在元素 ( ) 上添加填充<path fill="#FF0000">,但我的问题是,它并不总是路径元素,它也可以是<rect><ellipse>等等。

但是如果我想改变 svg 文件中所有元素的颜色呢?不管它是什么类型?

我的解决方案:

  • 找到所有支持 fill 属性的元素,然后遍历它们。

  • 只是在所有东西上加上一个填充标签,不管是什么标签,但不是所有标签都支持它,这不会引起问题吗?

我不喜欢这些解决方案中的任何一个......第一个不是动态的,另一个不是动态的很脏¨

我可以在这里做一些更聪明的事情吗?我可以定义全局颜色吗?还是svg.codeplex有一些我可以使用的功能(我找不到)?

4

2 回答 2

4

你试过 XPath 吗?(使用 System.Xml.XPath)

string newColor = "#123456";
XElement root = XElement.Load(file);
var colors = root.XPathSelectElements("//*[@fill]");
foreach(XElement node in colors)
    node.Attribute("fill").Value = newColor;

PS这是对您的第一个子弹的答案。

于 2012-08-09T17:19:04.230 回答
2

使用 css 设置颜色。如果您从元素本身中删除填充样式,那么您可以添加

<style type="text/css">
  <![CDATA[
    * {
      fill: #FF0000;
    }
  ]]>
</style>

或者在外部样式表中,接受填充颜色的所有内容都是红色的。您可以使用document.styleSheets[1]操作样式

于 2012-08-09T17:00:09.560 回答