2009-03-31 15 views
5

Sto utilizzando il modello MVVM e ho la proprietà del tipo stringa nel mio ModelView.WPF TextBlock dinamico grassetto e parti italiche

La stringa può contenere seguenti tag HTML:

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

ho bisogno di fare alcune parti del testo in TextBlock di essere in normale, grassetto o corsivo.

Al momento ho creato soluzione, un metodo di supporto che funziona in questo modo:

  1. Viaggi stringa HTML in parti

  2. Crea un'istanza della classe Run

  3. seconda etichetta, imposta le proprietà FontWeight o FontStyle

  4. Aggiunge l'istanza della classe Esegui a In linea di TextBlock s collezione

Questa soluzione funziona, ma non è compatibile con il pattern MVVM.

Stavo pensando di utilizzare i convertitori, ma non sono sicuro di quale proprietà di TextBlock dovrei eseguire.

Cosa ne pensi, come può essere risolto questo problema?

risposta

1

La soluzione più semplice che ho trovato per questo problema.

è quello di utilizzare BindableRichTextBox, che può essere trovato alla http://www.shawnduggan.com/?p=54

  1. Utilizzando convertitori convertire la stringa HTML da XAML e poi fare in oggetto FlowDocument

  2. Bind Documento di BindableRichTextBox

  3. Rendi RichTextBox simile a TextBlock (Focusable = "False", BorderThinkness = "0", BorderBrush = "Bianco" .... ecc.)

4

Una cosa che ho fatto in passato è usare un ContentControl, con la proprietà Content legata alla stringa con un ValueConverter che restituisce un TextBlock creato dinamicamente. Altre soluzioni possono essere trovate qui, tra cui this one.

+0

Proverà ContentControl e BindableRun. Grazie! –

+0

Ottima soluzione! Bene, ok, preferirei essere in grado di legarsi alla proprietà 'Inlines', ma in assenza di tale supporto, questa è una buona alternativa. Vale anche la pena notare che la proprietà 'Text' di' Run' è ora una proprietà di dipendenza, quindi può essere associata senza la necessità di BindableRun. –

Problemi correlati