我正在使用XamlServices.Transform获取对象模型并将其序列化为Xaml。
我实现了一个继承自XamlXmlWriter的类,它覆盖了WriteValue。我正在使用它将自定义MarkupExtension重新实例化回渲染的Xaml。
当我用WriteupExtension的语法替换WriteValue中的“value”时,XamlXmlWriter会自动为我转义MarkupExtension。
所以说我将值设置为“{MyExtension}”渲染的xaml看起来像这个“{} {MyExtension}” - 我想要未转义的前版本。
目前我在xaml上创建了一个讨厌的替换(“= \”{} {MyExtension“,”{MyExtension}“),这有效但不漂亮。
有没有办法拦截Xaml的写入,这个逃逸继续并告诉它不要逃避MarkUpExtension?或者有更好的方法来渲染MarkUpExtension?
谢谢,
丹尼尔
答案 0 :(得分:0)
嗯,我知道您可以向属性(或类型本身)添加TypeConverterAttribute
,将其转换为MarkupExtension
。因此,如果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中完成?