私はWPFアプリケーション用のテーマエディタを作っています。私はXAMLファイルを動的に生成し、アプリケーションで使用されるDLLにコンパイルします。 XAMLファイルを生成するために使用されるコードは、これらの線に沿って行く:XamlWriter.SaveがBaseUriプロパティをシリアル化するのを防ぐ方法を教えてください。
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でXMLに属性を削除することができましたが、私はよりクリーンなソリューションを望んでいました。
あなたの答えをありがとう、それは興味深い考えです...私は試してみましょう –