WPF TextBlock - динамические части, выделенные жирным и курсивом - PullRequest
5 голосов
/ 31 марта 2009

Я использую шаблон MVVM, и у меня есть свойство строкового типа в моем ModelView.

Строка может содержать следующие теги HTML:

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

Мне нужно сделать так, чтобы определенные части текста в TextBlock были обычным, жирным или курсивом.

На данный момент я создал обходной путь, вспомогательный метод, который работает следующим образом:

  1. Разбивает строку HTML на части

  2. Создает экземпляр класса Run

  3. В зависимости от тега устанавливает свойства FontWeight или FontStyle

  4. Добавляет экземпляр класса Run в коллекцию Inlines TextBlock

Это решение работает, но оно не совместимо с шаблоном MVVM.

Я думал об использовании Конвертеров, но я не уверен, с каким свойством TextBlock мне следует связываться.

Как вы думаете, как решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 31 марта 2009

В прошлом я использовал ContentControl со свойством Content, связанным со строкой, с помощью ValueConverter, который возвращает динамически созданный TextBlock. Другие решения можно найти здесь, в том числе это .

1 голос
/ 02 апреля 2009

Самое простое решение, которое я нашел для этой проблемы.

Используется BindableRichTextBox, который можно найти по адресу http://www.shawnduggan.com/?p=54

  1. Используя Преобразователи, преобразуйте строку HTML в XAML и затем превратите ее в объект FlowDocument

  2. Привязать документ к BindableRichTextBox

  3. Сделать RichTextBox похожим на TextBlock (Focusable = "False", BorderThinkness = "0", BorderBrush = "White" .... и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...