2009-01-22 11 views
8

(Déjame darte un poco de contexto) Actualmente estoy diseñando una aplicación que se supone que genera una página A4 imprimible basada en algunos datos. Naturalmente, los píxeles independientes del dispositivo de WPF (96 píxeles/pulgada) no son una unidad de medida muy natural en el mundo del papel. Algo como milímetros sería más apropiado. Así que saqué mi calculadora y llegué a un factor de escala de algo alrededor de 3.779.¿Cómo usar un sistema de coordenadas diferente en WPF? (solo escalado)

Resulta que simplemente golpeando todo lo que se supone que debe ir en la página en una ScaleTransform tiene un efecto secundario desagradable: Los tamaños de fuente se escalan demasiado (naturalmente). Esto, sin embargo, no es lo que pretendía. Me gustaría 12pt Arial para renderizar como 12pt. Arial se renderizaría normalmente.

¿Hay alguna otra manera de cambiar el sistema de coordenadas sin tener que llamar a las extensiones o lo que sea para convertir todas y cada una de las coordenadas, la longitud, el grosor, etc.? - o - ¿Hay alguna manera de mapa tamaños de fuente en la marcha, siendo DependencyProperties? ¿A través de un control personalizado que envuelve todo el contenido en papel, tal vez?

Respuesta

17

Para los requisitos detallados no es necesario hacer nada especial, solo usa centímetros como unidad de medida para los elementos WPF (es decir, sin ninguna transformación): la propia naturaleza de la independencia del dispositivo WPF te permite a la siguiente:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="29.7cm" Width="21cm" FontSize="16pt"> 
    <Grid> 
     <TextBlock Text="Sample" Height="1in" Width="1in" FontSize="12pt" 
      HorizontalAlignment="Center" VerticalAlignment="Center" 
      TextAlignment="Center"/> 
    </Grid> 
</Window> 

Es decir: que obtendrá una ventana A4 especificado en 'cm' con un cuadro de texto cuadrado centrado especificado en 'in' y una fuente especificada en 'pt'. Todos estos se escalarán adecuadamente con cualquier transformación que apliques adicionalmente, si es necesario (por ejemplo, mediante un deslizador de zoom para el puerto de visualización de usuarios), respetando sus tamaños relativos independientemente de que se especifiquen con unidades diferentes cada uno (es decir, uso mixto a voluntad).

unidades disponibles son px (por defecto), in, cm y pt, véase por ejemplo FrameworkElement.Height para obtener detalles sobre sus especificaciones.

+1

Gracias, no sabía que podría especificar unidades al asignar propiedades. Sí, esto es exactamente lo que quiero. –

0

Sólo set the font size a 12/3.779 = 3.175, ¿no? Asignarlo al objeto que lo contiene y debería filtrarse a todos los niños.

+0

Lo que no quiero es introducir tales "conversiones" en las asignaciones de propiedades. Incluso si estuviera oculto con alguna sintaxis personalizada. –

2

También puede establecer tamaños en puntos (FontSize = "10pt"), en pulgadas (FontSize = "10in") o en centímetros (FontSize = "10cm"). Por supuesto, el tamaño real depende de la configuración de DPI de Windows y del DPI de su monitor o impresora en este caso.

+1

Thx, no lo sabía. Sin embargo, aceptaré la respuesta de Steffen Opels, ya que proporciona una más detallada. –

Cuestiones relacionadas