2010-08-09 16 views
22

Ich habe in WPF festgestellt, die Standardschriftgröße von 12 Punkten entspricht in etwa 9 Punkten in "normalen" Anwendungen (z. B. WordPad), 10 pt in WPF ist grob 7 pt Standard, und wenn ich versuche, die Standardschriftgröße von 10 pt in WordPad in WPF zu vergleichen, habe ich 13 am nächsten gefunden.Konvertierung zwischen WPF Schriftgröße und "Standard" Schriftgröße

Erstens, warum verwendet WPF solche bizarren, nicht standardmäßigen Schriftgrößen, und zweitens gibt es eine zuverlässige Möglichkeit, zwischen den beiden zu konvertieren?

Mein Grund für die Frage ist, ich möchte ein Schriftgrößenmenü mit "Standard" Schriftgrößen von 9, 10, 12, 14, 16, 18, 24, 36, 48, aber ich bin mir ziemlich sicher, wenn ich Verwenden Sie diese tatsächlichen Werte, die sie wild aus sein werden.

Antwort

30

WPF verwendet Pixel als Standardeinheit für font size. Die Abbildung zwischen points (wahrscheinlich das, was meinen Sie, wenn Sie "Standard" font size sagen) und Pixel: 1 pt = (96/72) px

Dies gibt uns eine einfache Umwandlungsfunktion:

public static double PointsToPixels(double points) 
{ 
    return points*(96.0/72.0); 
} 

Weitere Details finden Sie unter this question.

+0

Dank! Das scheint der fehlende Schlüssel zu sein. Ich sehe auch, dass ich Schriftgrößen mit einem "qualifizierten Doppel" spezifizieren kann und Punkte als die Einheit angeben kann, aber ich frage mich, wie man das aus dem Code macht. – devios1

+1

Erwähnenswert ist, dass die WPF-Dokumentation die Angelegenheit erheblich verwirrt, indem sie diese 1/96 Zoll-Pixel als "em-Einheiten" bezeichnet, die sich völlig von der typografischen Bedeutung von "em" unterscheiden (wie bei [CSS] (http: // www .w3.org/TR/CSS21/syndata.html # value-def-length)) –

19

Ein weiteres Verfahren für die Konvertierung, wenn Sie von Punkt zu WPF Doppel fahren ist die System.Windows.FontSizeConverter Klasse zu verwenden:

double sizeForWpf = (double) new FontSizeConverter().ConvertFrom("10pt"); 
+3

Nun, wie konvertiert man ** ** zu sizeForWpf ** zurück? – moldovanu