2010-12-18 8 views
1

私はXamlServices.Transformを使用してオブジェクトモデルを取得し、それをXamlにシリアル化しています。System.Xaml.XamlXmlWriterがMarkupExtensionをエスケープしないようにするにはどうすればよいですか?

私はWriteValueをオーバーライドするXamlXmlWriterから継承するクラスを実装しました。私はこれを使って、カスタムMarkupExtensionをレンダリングしたXamlに再インスタンス化します。

WriteValueの "value"をMarkupExtensionの構文に置き換えると、XamlXmlWriterが自動的にMarkupExtensionをエスケープします。

"{MyExtension}"に値を設定すると、レンダリングされたxamlはこの "{} {MyExtension}"のようになります。 - エスケープされていない元のバージョンが必要です。

現在、それが作成されていた後、私はXAMLに厄介な取り付けます( "= \" {} {MyExtension」、 "{MyExtensionを}")やっている、動作しますが、かなりされていない。

されていますそこにこのエスケープが進む時点で、XAMLの書き込みを傍受するための方法およびMarkUpExtensionをエスケープしないようにそれを言う?そ​​れともMarkUpExtensionをレンダリングするための良い方法はあります?

おかげで、

ダニエル

答えて

0

さて、あなたはTypeConverterAttributeMarkupExtensionに変換するプロパティ(または型自体)に追加します。だから、MyClassは(おそらくタイプミスがあり、メモリから、テストされていない)を使用し、MyExtensionを使用してシリアル化する必要がある場合:

[TypeConverter(typeof(MyClassToMyExtensionConverter))] 
public sealed class MyClass { } 

public sealed class MyExtension : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider sp) { return new MyClass(); } 
} 

public sealed class MyClassToMyExtensionConverter : TypeConverter 
{ 
    public override bool CanConvertTo(ITypeDescriptorContext ctx, Type t) { return t == typeof(MarkupExtension); } 
    public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo culture, object obj, Type t) { return ConvertToInternal((MyClass) obj); } 
    private MyExtension ConvertToInternal(MyClass value) { return new MyExtension(); } 
} 

は、あなたが探しているものこれは、またはあなたがXamlXmlWriter以内にそれを行うことができるようにする必要があります?

+0

こんにちはRobertさん、ありがとうございました。それは私の状況では助けになりません。私はXamlxmlWriter自体からそれが必要です。とにかくおかげで。 –

+0

@Daniel James Bryars - Oops;申し訳ありませんが、戻ってくるのにとても時間がかかりました。独自のXamlSchemaContextを実装できますか? –

関連する問題