2010-06-01 36 views
5

Tôi có RichTextBox và cần phải tuần tự hóa nội dung của nó vào cơ sở dữ liệu của tôi hoàn toàn cho mục đích lưu trữ. Nó sẽ xuất hiện mà tôi có một sự lựa chọn giữa serializing như XAML hoặc như RTF, và đang tự hỏi nếu có bất kỳ lợi thế để serializing XAML trên RTF, mà tôi sẽ xem xét như nhiều hơn "tiêu chuẩn".Nối tiếp WPF RichTextBox thành XAML vs RTF

Cụ thể, tôi có mất khả năng nào bằng cách tuần tự hóa thành RTF thay vì XAML không? Tôi hiểu XAML hỗ trợ các lớp tùy chỉnh bên trong FlowDocument, nhưng tôi hiện không sử dụng bất kỳ lớp tùy chỉnh nào (mặc dù khả năng mở rộng có thể là đủ lý do để sử dụng XAML).

Cập nhật: Tôi đã kết thúc với RTF vì hỗ trợ cho hình ảnh nhúng được mã hóa văn bản. XAML dường như không bao gồm dữ liệu hình ảnh trong mã hóa của nó và XamlPackage mã hóa thành nhị phân, vì vậy RTF chỉ hoạt động tốt hơn cho tôi. Cho đến nay tôi đã không nhận thấy bất kỳ thiếu khả năng.

Trả lời

5

Nếu tất cả người dùng của bạn đang làm là nhập vào RichTextBox và định dạng ký tự, RTF tốt bằng XAML. Tuy nhiên, có rất nhiều khả năng FlowDocument mà bạn có thể phơi bày trong giao diện người dùng của mình mà không thể chuyển đổi thành RTF.

Dưới đây là một số ví dụ về FlowDocument (và RichTextBox) tính năng mà không expressable trong RTF hoặc được thực hiện khác nhau:

  • Một khối có thể có một BorderBrush tùy ý, bao gồm bàn chải gradient với điểm dừng, VisualBrush
  • Phần có thuộc tính HasTrailingParagraphBreakOnPaste
  • Floater/ClearFloaters được triển khai khác nhau
  • Gạch nối có thể được bật/tắt mỗi khối, không chỉ cho mỗi đoạn
  • Các kiểu WPF và ResourceDictionaries có thể được bao gồm trong thuộc tính Tài nguyên
  • Giao diện người dùng WPF tùy ý như Hộp kiểm bị ràng buộc, vv, có thể được nhúng bên trong RichTextBox và có thể được cắt và dán từ các cửa sổ khác.

Ví dụ: giả sử bạn muốn cho phép người dùng kéo hoặc cắt/dán vào trường "ngày/giờ hiện tại" vào RichTextBox sẽ luôn hiển thị ngày và giờ hiện tại. Điều này có thể được thực hiện bằng cách thêm một RichTextBox chỉ đọc thứ hai có InlineUIContainer và điều khiển đã bị ràng buộc. Điều này thậm chí hoạt động khi cắt và dán từ các ứng dụng khác và không yêu cầu điều khiển tùy chỉnh.

Một lưu ý khác là mã chuyển đổi giữa FlowDocument và RTF là tương đối phức tạp nên nó có thể có hiệu suất thấp hơn so với đi với XAML. Tất nhiên XAML không bao gồm hình ảnh và như vậy - cho rằng bạn cần phải sử dụng XamlPackage. Tôi lưu trữ XamlPackage của tôi trong cơ sở dữ liệu dưới dạng một byte [], nhưng bạn cũng có thể chọn Base64 mã hóa nó để lưu trữ dưới dạng một chuỗi.

Điểm mấu chốt là nó thực sự phụ thuộc vào việc bạn có muốn người dùng có thể sử dụng các tính năng không có sẵn trong RTF hay không. Ngay cả khi ứng dụng của bạn không bao gồm các công cụ để tạo FlowDocuments sử dụng các tính năng này, bạn có thể cắt và dán chúng từ các ứng dụng khác.

Các vấn đề liên quan