2009-03-31 80 views
5

Estoy usando el patrón MVVM y tengo propiedad de tipo de cadena en mi ModelView.WPF TextBlock dinámico en negrita y cursiva

La cadena puede contener las siguientes etiquetas HTML:

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

Necesito hacer ciertas partes del texto en TextBlock al encontrarse en estado normal, negrita o cursiva.

Al momento en que se han creado solución, un método de ayuda que funciona así:

  1. saltos de cadena HTML en partes

  2. Crea instancia de la clase Run

  3. Dependiendo de la etiqueta, establece las propiedades de FontWeight o FontStyle

  4. Agrega una instancia de la clase Run a TextBlock's Inline s colección

Esta solución funciona, pero no es compatible con el patrón MVVM.

Estaba pensando en usar Convertors, pero no estoy seguro de a qué propiedad de TextBlock debo encuadernarme.

¿Qué piensas, cómo se puede resolver este problema?

Respuesta

1

La solución más fácil que he encontrado para este problema.

es utilizar BindableRichTextBox, que se puede encontrar en http://www.shawnduggan.com/?p=54

  1. utilizaban convertidores convierten una cadena HTML para XAML y luego convertirlo en objeto FlowDocument

  2. Enlazar documento a BindableRichTextBox

  3. Hacer que RichTextBox parezca TextBlock (Focusable = "False", BorderThinkness = "0", BorderBrush = "White" ... etc)

4

Algo que he hecho en el pasado es usar un ContentControl, con la propiedad Content unida a la cadena con un ValueConverter que devuelve un TextBlock creado dinámicamente. Otras soluciones se pueden encontrar aquí, incluido this one.

+0

Probaremos ContentControl y BindableRun. ¡Gracias! –

+0

¡Gran solución! Bueno, de acuerdo, preferiría poder enlazar a la propiedad 'Inlines', pero en ausencia de tal soporte, esta es una muy buena alternativa. También vale la pena señalar que la propiedad 'Text' de' Run' ahora es una propiedad de dependencia, por lo que puede vincularse sin la necesidad de BindableRun. –

Cuestiones relacionadas