我使用XamlServices.Transform获取一个对象模型并将其序列化为Xaml。
我实现了一个从覆盖WriteValue的XamlXmlWriter继承而来的类。我使用它将一个自定义MarkupExtension重新实例化到呈现的Xaml中。
当我将WriteValue中的“值”替换为MarkupExtension的语法时,XamlXmlWriter会自动为我转义MarkupExtension。
因此,假设我将值设置为"{MyExtension}“,呈现的xaml看起来像这样"{}{MyExtension}”--我想要未转义的旧版本。
目前,我正在对创建的xaml进行一个讨厌的替换(“=\”{}{MyExtension“,"{MyExtension}"),这是可行的,但并不美观。
有没有办法在这种转义继续进行的时候拦截Xaml的写入,并告诉它不要转义MarkUpExtension?或者,也许有更好的方法来呈现MarkUpExtension?
谢谢,
丹尼尔
发布于 2010-12-28 09:04:49
我知道您可以向将其转换为MarkupExtension
的属性(或类型本身)添加TypeConverterAttribute
。因此,如果应该使用MyExtension序列化MyClass
,请使用(未经测试,来自内存,可能有输入错误):
[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中实现?
https://stackoverflow.com/questions/4478890
复制