我有一个 RichTextBox
并且需要将其内容序列化到我的数据库中,纯粹是为了存储目的。看来我可以在序列化为 XAML 或 RTF 之间进行选择,并且想知道序列化为 XAML 是否比 RTF 有任何优势,我认为 RTF 更“标准”。
特别是,我是否会因为序列化为 RTF 而不是 XAML 而失去任何能力?我了解 XAML 支持 FlowDocument 中的自定义类,但我目前没有使用任何自定义类(尽管可扩展性的潜力可能足以成为使用 XAML 的理由)。
更新:我最终选择了 RTF,因为它支持文本编码的嵌入式图像。 XAML 似乎没有在其编码中包含图像数据,而 XamlPackage 编码为二进制,因此 RTF 对我来说效果更好。到目前为止,我还没有注意到任何能力不足。
最佳答案
如果您的所有用户都在输入 RichTextBox 并进行字符格式化,那么 RTF 与 XAML 一样好。但是,您可能会在 UI 中公开许多无法转换为 RTF 的 FlowDocument 功能。
以下是一些在 RTF 中无法表达或以不同方式实现的 FlowDocument(和 RichTextBox)功能示例:
例如,假设您希望允许用户将“当前日期/时间”字段中的“当前日期/时间”字段拖动或剪切/粘贴到始终显示当前日期和时间的 RichTextBox 中。这可以通过添加第二个具有 InlineUIContainer 和已绑定(bind)控件的只读 RichTextBox 来完成。这甚至在从其他应用程序剪切和粘贴时也有效,并且不需要自定义控件。
另一个考虑因素是在 FlowDocument 和 RTF 之间转换的代码相对复杂,因此它的性能可能低于使用 XAML 的性能。当然,松散的 XAML 不包括图像等 - 为此您需要使用 XamlPackage。我将我的 XamlPackage 作为字节 [] 存储在数据库中,但您也可以选择 Base64 对其进行编码以存储为字符串。
最重要的是,这实际上取决于您是否希望用户能够使用 RTF 中不可用的功能。即使您的应用程序不包含生成使用这些功能的 FlowDocuments 的工具,也可以从其他应用程序中剪切和粘贴它们。
关于wpf - 将 WPF RichTextBox 序列化为 XAML 与 RTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946910/