Могу ли я сохранить FlowDocument в BAML программным способом?
-
05-07-2019 - |
Вопрос
Кто-нибудь нашел способ сохранить FlowDocument как BAML или другой сжатый формат? Я могу импортировать XML с изображениями для создания нового FlowDocument:
<TextRange class instance>.Load(fs, DataFormats.Rtf)
Однако я не нашел хорошего способа сохранить его в «сжатом» формате. Несжатый XAML легко генерировать, используя:
<TextRange class instance>.Save(fs, DataFormats.Xaml);
Но есть ли программный способ сохранить его в сжатом формате?
Если нет существующего метода, кто-нибудь знает, где найти программный компилятор XAML? Или даже только спецификации BAML? Я мог бы программно сгенерировать все окно XAML со встроенным FlowDocument, но я все же хотел бы преобразовать XAML в BAML для более быстрой загрузки. Я использую относительно большие документы RTF и время преобразования с использованием DataFormats.Rtf является значительным.
Решение
Я не думаю, что это возможно ... BamlWriter помечен как внутренний, надеюсь, он скоро откроется!
К сожалению, я не знаю ни одного компилятора XAML
Другие советы
Что ж, получается, что вы можете запускать Visual C # 2008 Express без графического интерфейса. И вы можете изменить окончательное имя программы с помощью кода перед компиляцией. Я уверен, что вы можете сделать это через API, но вот хак, который я нашел:
<Ол>Мне нравится проверять, а затем удалять ошибки. текст после каждого запуска, чтобы было легче увидеть, что я получил чистую сборку. Это не идеально, потому что вы должны иметь полностью купленную версию Visual C # 2008 на каждой машине, которую вы используете таким образом, но это способ создать новый исполняемый файл для отображения каждого потокового документа программным способом. Также, если у вас есть ошибка в вашем XAML, вы можете сгенерировать программу, которая не будет работать.
Обратите внимание, что формат BAML НЕ сжимает текст, только теги и прочую «сантехнику». Даже информация Margin и Padding сохраняется в чистом ASCII. Это наследуется концом .exe, оставляя текст четко видимым в разделах в блокноте или подобном.
Формат XamlPackage сжат:
<TextRange class instance>.Save(fs, DataFormats.Xaml);