Как предотвратить System.Xaml.XamlXmlWriter от моего MarkupExtension? - PullRequest
1 голос
/ 18 декабря 2010

Я использую XamlServices.Transform, чтобы взять объектную модель и сериализовать ее в Xaml.

Я реализовал класс, который наследуется от XamlXmlWriter, который переопределяет WriteValue. Я использую это для повторного создания пользовательского MarkupExtension обратно в визуализированный Xaml.

Когда я заменяю «значение» в WriteValue синтаксисом для MarkupExtension, XamlXmlWriter автоматически исключает для меня MarkupExtension.

Скажем, я установил значение "{MyExtension}", рендеринг xaml выглядит так: "{} {MyExtension}" - я хочу прежнюю версию без экранирования.

В настоящее время я делаю неприятную замену ("= \" {} {MyExtension "," {MyExtension} ") на xaml после его создания, что работает, но не очень красиво.

Есть ли способ перехватить запись Xaml в точке, в которой происходит это экранирование, и сказать ему не избегать MarkUpExtension? Или, может быть, есть лучший способ визуализации MarkUpExtension?

Спасибо

Daniel

1 Ответ

0 голосов
/ 28 декабря 2010

Ну, я знаю, что вы можете добавить 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...