2009-03-12 13 views
6

Ho un controllo Label WPF che sto cercando di modificare l'aspetto dell'utilizzo di un oggetto System.Drawing.Font fornito da un codice legacy. Sono stato in grado di impostare la maggior parte delle proprietà, ma sto lottando con Strikeout e Underline.Utilizzo di un System.Drawing.Font con un'etichetta WPF

Finora ho:

System.Drawing.Font font = FontFromLegacyCode(); 

System.Windows.Controls.Label label = new System.Windows.Controls.Label(); 
label.FontFamily = new System.Windows.Media.FontFamily(font.Name); 
label.FontWeight = font.Bold ? System.Windows.FontWeights.Bold : System.Windows.FontWeights.Regular; 
label.FontStyle = font.Italic ? System.Windows.FontStyles.Italic : System.Windows.FontStyles.Normal; 
label.FontSize = font.Size; 

Come si imposta il tipo di carattere barrato o sottolineato le proprietà? C'è un controllo migliore da usare?

risposta

8

Lo cambierei in un controllo TextBlock. Il controllo TextBlock ha la proprietà TextDecorations che è possibile utilizzare.

<TextBlock Name="textBlock" TextDecorations="Underline, Strikethrough" /> 

Oppure si può attaccare un TextBlock all'interno di un'etichetta se vi piace (anche se mi basta usare TextBlock da solo).

<Label Name="label"> 
    <TextBlock Name="textBlock" TextDecorations="Underline, Strikethrough" /> 
</Label> 

Dai un'occhiata alla classe TextDecorations.

Trovo che i TextBlock siano più adatti delle etichette nella maggior parte delle situazioni. Ecco uno blog post sulle differenze. La principale differenza è che un'etichetta è un controllo mentre TextBlock è solo un FrameworkElement. Inoltre un'etichetta supporta le chiavi di accesso.

+0

Perfetto, grazie. Avrei dovuto usare un TextBlock in primo luogo. – bstoney

1

Guardando il codice che hai già, potrebbe esserci un problema. Sul MSDN su Windows Form and WPF Property mapping Fanno il commento:

dimensione del carattere in WPF è espresso come uno novantiseisimi di pollice, e in Windows Form come uno settantiduesimi di un pollice. La conversione corrispondente è:

Dimensione carattere Windows Form = dimensione carattere WPF * 72.0/96.0.

+1

Poiché ho appena usato questo, anche se si utilizza WPF in un host dell'elemento WinForms, è possibile modificare la dimensione come '(FontSize * 96)/72'. Questo è possibile se si dispone di una dimensione di carattere memorizzata in un ambiente di Windows Form e occorre tradurlo in un FontSize WPF per un controllo WPF ospitato come un blocco di testo o una casella di testo. –