Вот один из методов.
Сначала создайте MarkupExtension, которое может создать требуемый класс.Супер-простым было бы:
public class DocumentPageExtension : MarkupExtension
{
public Visual Visual { get; set; }
public Size PageSize { get; set; }
public Rect BleedBox { get; set; }
public Rect ContentBox { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new DocumentPage(Visual, PageSize, BleedBox, ContentBox);
}
}
Теперь, после того как XamlWriter напишет ваш документ, просто замените «DocumentPage» на «my: DocumentPageExtension», добавив соответствующее объявление пространства имен в верхней части файла.
Полученный файл должен быть доступен для чтения по XamlReader.Load
.
Возможно, XamlWriter не хранит значения свойств, доступных только для чтения, например, найденных в DocumentPage.(Я почти всегда использую замену XamlWriter, которую я написал некоторое время назад.) Если он вообще не сериализует эти свойства, приведенную здесь методику необходимо будет дополнить каким-либо другим способом получения этих значений свойств в XAML в первомplace.
Также обратите внимание, что общий вызывающий конструктор MarkupExtension может быть создан вместо «специального кожуха» для каждого объекта, который требует обработки таким способом.