Если все ваши пользователи набирают RichTextBox и выполняют форматирование символов, RTF так же хорош, как XAML. Однако существует множество возможностей FlowDocument, которые вы можете использовать в своем пользовательском интерфейсе и которые не могут быть преобразованы в RTF.
Вот несколько примеров функций FlowDocument (и RichTextBox), которые не выражаются в RTF или реализованы по-другому:
- Блок может иметь произвольную BorderBrush, включая градиентные кисти с остановками, VisualBrush
- Раздел имеет свойство HasTrailingParagraphBreakOnPaste
- Floater / ClearFloaters реализован по-разному
- Перенос можно включать / отключать для каждого блока, а не только для каждого абзаца
- Стили WPF и словари ресурсов могут быть включены в свойство Resources
- Произвольный пользовательский интерфейс WPF, такой как связанные флажки и т. Д., Может быть встроен в RichTextBox и может быть вырезан и вставлен из других окон.
Например, предположим, что вы хотите разрешить пользователям перетаскивать или вырезать / вставлять в поле «текущая дата / время» в RichTextBox, в котором всегда отображаются текущие дату и время. Это можно сделать, добавив второй доступный только для чтения RichTextBox, который имеет InlineUIContainer и уже связанный элемент управления. Это работает даже при вырезании и вставке из других приложений и не требует пользовательских элементов управления.
Другое соображение заключается в том, что код для преобразования между FlowDocument и RTF является относительно сложным, поэтому он может иметь более низкую производительность, чем при работе с XAML. Конечно, свободный XAML не включает изображения и тому подобное - для этого вам нужно использовать XamlPackage. Я храню свой XamlPackage в базе данных как байт [], но вы также можете выбрать кодирование Base64 для хранения в виде строки.
Суть в том, что это действительно зависит от того, хотите ли вы, чтобы пользователь мог использовать функции, недоступные в RTF. Даже если ваше приложение не содержит инструментов для создания FlowDocuments, использующих эти функции, их можно вырезать и вставлять из других приложений.