2009-03-12 9 views
6

Mam kontrolkę WPF Label, którą próbuję zmienić wygląd przy użyciu obiektu System.Drawing.Font dostarczonego przez jakiś starodawny kod. Byłem w stanie ustawić większość właściwości, ale walczę ze Strikeout i Underline.Używanie System.Drawing.Font z etykietą WPF

Do tej pory mam:

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; 

Jak ustawić przekreślenie czcionki lub podkreślenie właściwości? Czy istnieje lepsza kontrola do użycia?

Odpowiedz

8

Zmieniłbym go na kontrolkę TextBlock. Kontrolka TextBlock ma właściwość TextDecorations, której możesz użyć.

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

Lub można trzymać TextBlock wewnątrz Label jeśli naprawdę jak (chociaż ja po prostu korzystać z TextBlock samą w sobie).

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

Zobacz klasę TextDecorations.

Uważam, że TextBlocks są bardziej odpowiednie niż etykiety w większości sytuacji. Oto blog post o różnicach. Główną różnicą jest to, że etykieta jest formantem, podczas gdy TextBlock to tylko element FrameworkElement. Również etykieta obsługuje klucze dostępu.

+0

Doskonale, dziękuję. Powinienem był używać TextBlock w pierwszej kolejności. – bstoney

1

Patrząc na kod, który już masz, może być z nim jakiś problem. Na MSDN na Windows Form and WPF Property mapping robią komentarza:

rozmiar czcionki w WPF jest wyrażona jako jedno dziewięćdziesiątego szóstego cala, a w Windows Forms jako jeden siedemdziesięciu sekundę cala. Odpowiednia konwersja to:

Windows Forms rozmiar czcionki = rozmiar czcionki WPF * 72,0/96,0.

+1

Ponieważ właśnie tego użyłem, również jeśli używasz WPF na hoście WinForms, możesz zmienić rozmiar na '(FontSize * 96)/72'. Dzieje się tak, jeśli masz zapisany rozmiar czcionki w środowisku okienkowym i musisz przetłumaczyć to na rozmiar czcionki WPF dla hostowanego formantu WPF, takiego jak blok tekstu lub pole tekstowe. –

Powiązane problemy