WPFアプリケーションのテーマエディターを作成しています。XAMLファイルを動的に生成してから、アプリケーションで使用されるDLLにコンパイルします。XAMLファイルの生成に使用されるコードは、次の行に沿っています。
var dictionary = new ResourceDictionary();
...
dictionary.Add(key, new BitmapImage { UriSource = new Uri(relativePath, UriKind.Relative) });
...
XamlWriter.Save(dictionary, "myDictionary.xaml");
私の問題は、プロパティXamlWriter.Save
もシリアル化することです。BaseUri
<BitmapImage BaseUri="{x:Null}" UriSource="Images\myImage.png" x:Key="myImage" />
その結果、アプリケーションがこの画像をフェッチしようとすると、が設定されていないため、画像が見つかりませんBaseUri
。通常、XAMLパーサーはこのプロパティを(IUriContext
インターフェイスを介して)設定しますが、XAMLで既に明示的に設定されている場合、パーサーはそれを設定しないため、nullのままになります。
プロパティのXamlWriter
シリアル化を防ぐ方法はありますか?BaseUri
カスタムクラスをシリアル化する場合は、ShouldSerializeBaseUri()
メソッドを追加するか、明示的に実装することができIUriContext
ます(両方のオプションを試したところ、目的の結果が得られました)が、どのように実行すればよいBitmapImage
ですか?
最後の手段として、XAMLファイルをロードし、Linq to XMLで属性を削除することもできましたが、よりクリーンなソリューションを望んでいました。