2009-02-03 3 views
24

Ho un controllo TextBlock di databound (che viene utilizzato all'interno di un DataTemplate per visualizzare elementi in un ListBox) e desidero rendere tutto il testo nel controllo grassetto. Non riesco a trovare una proprietà in explorer proprietà per impostare l'intero testo in grassetto, e tutto quello che posso trovare online è l'uso del tag <Bold> all'interno di TextBlock, ma non riesco a inserirlo in quanto i dati sono proveniente direttamente dalla fonte dei dati.Impostare TextBlock per essere completamente grassetto quando DataBound in WPF

Ci deve essere un modo per farlo, ma come? Sono molto inesperto in WPF quindi non so davvero dove guardare.

risposta

69

Mi manca qualcosa oppure è sufficiente impostare la proprietà FontWeight su "Bold"?

<TextBlock FontWeight="Bold" Text="{Binding Foo}" /> 
+0

Grazie! Che funzioni. Tuttavia, la stessa cosa non funziona con FontWeight of Italic. C'è un modo altrettanto semplice di fare il corsivo? – robintw

+6

Sicuro! Stile carattere. Vedi http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.fontstyle.aspx –

0

Si dice che i dati provengano direttamente dall'origine dati; è possibile posizionare uno strato di astrazione di fronte ad esso? È abbastanza comune creare una vista per ciò che si sta visualizzando e fare in modo che la vista comunichi con i dati. L'implementazione più comune di questa idea è Model View View-Model (MVVM). Leggi qualcosa online.

Si potrebbe avere una proprietà 'DisplayText' associata alla casella di testo, ed è semplicemente un 'getter' che racchiude il testo sottostante. Può rilevare se il testo è già stato inserito e, in caso contrario, avvolgerlo.

Es.

public class TestView { 
    private Test datasource; 
    public TestView(Test source) 
    { 
    this.datasource = source; 
    } 

    public string DisplayText { 
    get { 
     if (datasource.Text.Contains("<bold>")==false) { 
      return "<bold>" + datasource.Text + "</bold>"; 
     } 
     return datasource.Text; 
    } 
    } 
} 

Quindi, associare alla vista anziché direttamente all'oggetto.

2

Piuttosto che avere un TextBlock, provate questo:

<TextBlock> 
    <Bold> 
    <Run /> 
    </Bold> 
</TextBlock> 

Poi DataBind alla Run.TextProperty invece.

+1

qual è il vantaggio? – nicolas

+0

Mentre la domanda originale chiedeva come impostare l'intero blocco in grassetto, questo è utile se si desidera che parti particolari del testo siano in grassetto, assumendo che gli elementi siano elementi separati a cui è possibile associare. –