2

要素 ( ) に塗りつぶしを簡単に追加できます<path fill="#FF0000">が、私の問題は、それが常にパス要素であるとは限らず、 である可能性があること<rect>など<ellipse>です。

しかし、svg ファイル内のすべての要素の色を変更したい場合はどうすればよいでしょうか? どんなタイプでもいいの?

私の解決策:

  • fill 属性をサポートするすべての要素を検索し、それらをループします。

  • どんなタグでも、すべてのタグがそれをサポートしているわけではなく、すべてにフィルタグを付けるだけで、問題が発生することはありませんか?

私はこれらのソリューションのどれも好きではありません...最初のものは動的ではなく、もう1つは動的ではありませんが汚いです¨

ここでもっとスマートにできることはありますか?グローバルカラーなどを定義できますか? または、 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 に答える