2009-03-31 5 views
5

Tôi đang sử dụng mẫu MVVM và tôi có thuộc tính kiểu chuỗi trong ModelView của mình.WPF TextBlock động đậm và nghiêng phần

Chuỗi có thể chứa các thẻ HTML sau:

<b>, </b>, <i>, </i> 

tôi cần phải thực hiện một số phần của văn bản trong TextBlock được trong bình thường, in đậm hoặc in nghiêng.

Tại thời điểm tôi đã tạo ra cách giải quyết, một phương pháp helper mà làm việc như thế này:

  1. Breaks chuỗi HTML thành các phần

  2. Tạo thể hiện của Run lớp

  3. Tùy thuộc vào thẻ, đặt thuộc tính FontWeight hoặc FontStyle

  4. Thêm thể hiện của lớp Khởi động vào nội tuyến của TextBlock s bộ sưu tập

Giải pháp này hoạt động nhưng không tương thích với mẫu MVVM.

Tôi đã nghĩ đến việc sử dụng Trình chuyển đổi, nhưng tôi không chắc chắn nên sử dụng thuộc tính nào của TextBlock.

Bạn nghĩ sao, vấn đề này có thể được giải quyết như thế nào?

Trả lời

1

Giải pháp dễ dàng nhất mà tôi đã tìm thấy cho sự cố này.

Là sử dụng BindableRichTextBox, có thể được tìm thấy tại http://www.shawnduggan.com/?p=54

  1. Sử dụng Convertors chuyển đổi chuỗi HTML để XAML và sau đó làm cho nó thành đối tượng FlowDocument

  2. Document Bind to BindableRichTextBox

  3. Làm cho RichTextBox trông giống như TextBlock (Focusable = "False", BorderThinkness = "0", BorderBrush = "White" .... vv)

4

Điều tôi đã làm trong quá khứ là sử dụng ContentControl, với thuộc tính Nội dung được liên kết với chuỗi bằng một ValueConverter trả về một TextBlock được tạo động. Các giải pháp khác có thể được tìm thấy ở đây, bao gồm this one.

+0

Sẽ thử ContentControl và BindableRun. Cảm ơn bạn! –

+0

Giải pháp tuyệt vời! Vâng, ok, tôi muốn có thể liên kết với thuộc tính 'Inlines', nhưng trong trường hợp không hỗ trợ như vậy, đây là một lựa chọn thực sự tốt. Cũng cần lưu ý rằng thuộc tính 'Text' của' Run' bây giờ là thuộc tính phụ thuộc, vì vậy có thể bị ràng buộc mà không cần BindableRun. –