2011-06-27 13 views
4

私は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.SaveBaseUriプロパティをシリアル化していることである:

<BitmapImage BaseUri="{x:Null}" UriSource="Images\myImage.png" x:Key="myImage" /> 

結果は、そのアプリケーションは、このイメージを取得しようとするとBaseUriが設定されていないため、見つからない。通常、XAMLパーサーは(IUriContextインターフェイスを介して)このプロパティを設定しますが、XAMLで明示的に設定されている場合、パーサーはそれを設定しないため、nullのままです。

XamlWriterBaseUriプロパティのシリアル化を防止する方法はありますか?私は、カスタムクラスをシリアル化された場合は

は、私がShouldSerializeBaseUri()メソッドを追加することができ、または(私は両方のオプションを試してみましたが、それらが所望の結果を与える)明示的IUriContextを実装するが、どのようにBitmapImageのためにそれを行うには?

最後の手段として、XAMLファイルを読み込んでLinqでXMLに属性を削除することができましたが、私はよりクリーンなソリューションを望んでいました。

答えて

0

私は最終的にLinqをXMLに手動でXAMLを生成することでこの問題を解決しました。

0

もしもXamlWriterBaseUriのプロパティを書いてしまうのを防ぐのではなく、画像の読み込みに影響を与えないものを教えてください。たとえば、次のコード:

<Image> 
    <Image.Source> 
    <BitmapImage UriSource="Resources/photo.JPG"/> 
    </Image.Source> 
</Image> 

はあなたのBitmapImageに映像ソースを設定しようと

dictionary.Add("Image", new BitmapImage{ 
    BaseUri=new Uri("pack://application:,,"), 
    UriSource = new Uri(@"Images\myImage.png", UriKind.Relative) 
    }); 

を試してみてください

<Image> 
    <Image.Source> 
    <BitmapImage BaseUri="pack://application:,," UriSource="Resources/photo.JPG"/> 
    </Image.Source> 
</Image> 

に相当すると思わコードからこのようにして作成 - それは動作しません。しかし XamlWriter.Save()は、XAMLのときに動作するXAMLを生成します。さて、私は望みを持たせる価値がある。

+0

あなたの答えをありがとう、それは興味深い考えです...私は試してみましょう –

関連する問題