Pregunta

¿Por qué WPF se procesa de manera diferente en Windows & nbsp; XP vs Windows & nbsp; 7?

Estoy usando .NET SP1 en ambas computadoras ..

Mi diseño es como esta ventana que no tiene barra de herramientas y está configurada para maximizarla para que se ajuste a toda la pantalla.

Debajo de eso, tengo un Viewbox configurado para usar Stretch: Uniform, y debajo de eso tengo mi LayoutRoot.

De esta manera esperaba obtener el mismo diseño en todas las computadoras, pero parece que no se reproduce exactamente igual en Windows & nbsp; XP. Algunos elementos son un poco más pequeños y el diseño no se ve tan bien.

He intentado cambiar mi resoulution en mi computadora Windows & nbsp; 7 a la misma que la computadora Windows & nbsp; XP, y mantiene el diseño como se supone.

Y ambas computadoras usan 96 DPI.

Windows XP

Windows 7

¿Fue útil?

Solución

Mi experiencia:

No estoy seguro de si es el problema, noté que Windows 7 usa la aceleración de hardware para dibujar la aplicación WPF. Windows XP no lo hace.

Puedes verificar si este es el caso usando algo como esto:

public partial class App
{
    public static int Tier { get { return RenderCapability.Tier >> 16; } }

    static App()
    {
        Console.Out.WriteLine("Render Tier: {0}", Tier);
    }
}

Su nivel de representación debe devolver 2 si usa un dibujo acelerado por hardware completo. 0 = software, 1 = algo en el medio si se adivina

Otros consejos

Tardé unas tres horas en resolver esto finalmente, después de mucho trabajo de detective, ¡pero ahora es un píxel perfecto!

Parece que WPF en Windows & nbsp; XP y WPF en Windows & nbsp; 7 no solo tienen diferentes caras de fuente predeterminadas caras así como una fuente predeterminada de tamaños .

  • Tuve un problema en el que las fuentes se representaban de manera diferente en Windows & nbsp; XP de cómo estaban en Windows & nbsp; 7. Era bastante crítico ya que la salida final era para la impresora, y debían ser idénticas. Al principio, parecía que el problema era una diferencia en el interlineado.
  • Sí: tenía la misma fuente instalada en Windows & nbsp; XP que estaba usando en Windows & nbsp; 7
  • Sí, probé una fuente muy genérica (Arial) y aún tuve los mismos problemas.
  • Sí: el mismo DPI en ambas máquinas.
  • Sí: el mismo resultado, ya sea en una VM (modo Windows & nbsp; XP) o en una máquina real con Windows & nbsp; XP.

Finalmente, descubrí que las fuentes en las que estaba especificando un tamaño explícito parecían idénticas en Windows & nbsp; XP, y solo aquellas en las que no especificaba un tamaño explícito eran diferentes.

Así es como lo arreglé en mi MainWindow.xaml , con un ContentControl para establecer un tamaño predeterminado:

<Grid x:Name="LayoutRoot" Background="#FFDEDEDE" UseLayoutRounding="True">
    <ContentControl FontFamily="Segoe UI" FontSize="12">
         ... window contents ...
    </ContentControl>
</Grid>

Nota: si está utilizando Blend que pueda necesitar para ingresar FontSize = " 12 " con la mano. Si lo seleccionas del diseñador de propiedades, lo eliminará, porque cree que 12 ya es el predeterminado.

Como dije, mi destino era la impresora, así que tuve que hacer lo mismo para el control que se está imprimiendo.

¿Dónde más puedo configurar este tamaño de fuente predeterminado? De todos modos, ahora tengo una representación de píxeles perfectos en Windows & nbsp; XP y Windows 7, y se diferencian solo por las diferencias de tipo claro de suavizado.

Nota: UseLayoutRounding no es parte de mi solución, pero siempre lo uso en mi control de raíz también.

Las fuentes predeterminadas son diferentes

Haz un botón WPF

<Button x:Name="button" Width="100" Height="25" Content="Button" Click="Button_Click"/>

y código detrás:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string msg = string.Format("Number of fonts: {1}{0}Font Family: {2}{0}Font Size: {3}",
        Environment.NewLine,
        button.FontFamily.FamilyNames.Values.Count.ToString(),
        button.FontFamily.FamilyNames.Values.First().ToString(),
        button.FontSize.ToString());

    MessageBox.Show(msg);
}

Ejecute esto en cada sistema operativo y verá que las fuentes predeterminadas para XP y Windows 7 son diferentes.

La fuente predeterminada para XP es & # 8220; Tahoma & # 8221; talla 11

La fuente predeterminada para Windows 7 es & # 8220; Segoe UI & # 8221; tamaño 12

Las diferentes versiones de Windows tienen diferentes fuentes predeterminadas (también diferentes versiones de las mismas fuentes) y diferentes motores de representación de fuentes, como resultado, el tamaño del texto es diferente entre los sistemas.

Puedes intentar establecer la fuente a la misma fuente y ver cómo funciona, tal vez intentes varias fuentes para verificar dónde está la diferencia más pequeña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top