2010-08-09 12 views
22

He notado en WPF, el tamaño de fuente predeterminado de 12 puntos es aproximadamente equivalente a 9 puntos en aplicaciones "normales" (por ejemplo, WordPad), 10 puntos en WPF es aproximadamente Estándar de 7 pt, y cuando trato de hacer coincidir el tamaño de fuente predeterminado de 10 pt en WordPad en WPF, he encontrado que 13 es el más cercano.Convirtiendo entre tamaño de fuente WPF y tamaño de fuente "estándar"

En primer lugar, ¿por qué WPF utiliza tamaños de fuente no estándar extraños, y en segundo lugar, hay una forma confiable de convertir entre los dos?

Mi razón para preguntar es que quiero construir un menú de tamaño de fuente con tamaños de fuente "estándar" de 9, 10, 12, 14, 16, 18, 24, 36, 48, pero estoy bastante seguro de que si utiliza esos valores reales que estarán locamente fuera de juego.

Respuesta

30

WPF usa píxeles como su unidad predeterminada para font size. El mapeo entre points (probablemente lo que quiere decir cuando se dice tamaño "estándar" de la fuente) y los píxeles es: 1 pt = (96/72) px

Esto nos da una sencilla función de conversión:

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

Ver this question para más detalles.

+0

Gracias! Esa parece ser la clave que falta. También veo que puedo especificar tamaños de fuente con un "doble calificado" y especificar puntos como unidad, sin embargo, me pregunto cómo hacerlo desde el código. – devios1

+1

Vale la pena señalar que la documentación de WPF confunde el asunto considerablemente al referirse a estos píxeles de 1/96 pulgadas como "unidades em" que es completamente diferente al significado tipográfico de "em" (como se usa con [CSS] (http: // www) .w3.org/TR/CSS21/syndata.html # value-def-length)) –

19

Otro método para la conversión si vas desde el punto de WPF doble es usar la clase System.Windows.FontSizeConverter:

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

Ahora, ¿cómo convertir de nuevo ** a points ** the sizeForWpf? – moldovanu