Domanda

Perché il rendering di WPF è diverso su Windows & nbsp; XP rispetto a Windows & nbsp; 7?

Sto usando .NET SP1 su entrambi i computer ..

Il mio layout è come questa finestra che non ha una barra degli strumenti ed è impostata per massimizzare in modo che si adatti a tutto lo schermo.

Sotto questo, ho una Viewbox impostata per usare Stretch: Uniform e sotto ho LayoutRoot.

In questo modo speravo di ottenere lo stesso layout su tutti i computer, ma sembra che non sia esattamente lo stesso su Windows & nbsp; XP. Alcuni elementi sono un po 'più piccoli e il layout non sembra eccezionale.

Ho provato a cambiare la mia risoluzione sul mio computer Windows & nbsp; 7 con lo stesso del computer Windows & nbsp; XP e mantiene il layout come dovrebbe.

Ed entrambi i computer usano 96 DPI.

Windows XP

Windows 7

È stato utile?

Soluzione

La mia esperienza :

Non sono sicuro che si tratti del problema, ho notato che Windows 7 utilizza l'accelerazione hardware per disegnare l'applicazione WPF. Windows XP no.

Puoi verificare se questo è il caso usando qualcosa del genere:

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

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

Il livello di rendering deve restituire 2 se utilizzava il disegno con accelerazione hardware completa. 0 = software, 1 = qualcosa nel mezzo se indovina

Altri suggerimenti

Mi ci sono volute circa tre ore per scoprirlo finalmente - dopo tanto lavoro investigativo, ma ora è il pixel perfetto!

Sembra che WPF su Windows & nbsp; XP e WPF su Windows & nbsp; 7 non abbiano solo caratteri volti diversi e un carattere predefinito dimensioni .

  • Ho avuto un problema a causa del rendering diverso dei caratteri su Windows & nbsp; XP rispetto a come erano su Windows & nbsp; 7. Era piuttosto critico poiché l'output finale era per la stampante e dovevano essere identici. Inizialmente sembrava che il problema fosse una differenza nella spaziatura di riga.
  • Sì, avevo installato lo stesso carattere esatto su Windows & nbsp; XP che stavo usando su Windows & nbsp; 7
  • Sì, ho provato un carattere molto generico (Arial) e ho ancora avuto gli stessi problemi.
  • Sì - Stesso DPI su entrambe le macchine.
  • Sì - Stesso risultato sia in una macchina virtuale (modalità Windows & nbsp; XP) che su una vera macchina Windows & nbsp; XP.

Alla fine ho scoperto che i caratteri in cui stavo specificando una dimensione esplicita sembravano identici su Windows & nbsp; XP, e solo quelli in cui non avevo specificato una dimensione esplicita erano diversi.

Ecco come l'ho corretto nel mio MainWindow.xaml - con un ContentControl per impostare una dimensione predefinita:

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

Nota: se stai utilizzando Blend potrebbe essere necessario per inserire FontSize = " 12 " a mano. Se lo selezioni dal designer delle proprietà, lo eliminerà, perché pensa che 12 sia già predefinito!

Come ho detto, la mia destinazione era la stampante, quindi ho dovuto fare lo stesso per il controllo in fase di stampa.

Dove altro posso impostare questa dimensione del carattere predefinita? Ad ogni modo, ora ho un rendering pixel perfetto su Windows & nbsp; XP e Windows 7, e differiscono solo per le differenze di anti-aliasing cleartype.

Nota: UseLayoutRounding non fa parte della mia soluzione, ma lo uso sempre anche sul mio controllo di root.

I caratteri predefiniti sono diversi

Crea un pulsante WPF

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

e codice dietro:

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);
}

Esegui questo su ciascun sistema operativo e vedrai che i caratteri predefiniti per XP e Windows7 sono diversi.

Il carattere predefinito per XP è "Tahoma" dimensione 11

Il carattere predefinito per Windows 7 è la dimensione "Segoe UI" 12

Diverse versioni di Windows hanno caratteri predefiniti diversi (anche versioni diverse degli stessi caratteri) e motori di rendering dei caratteri diversi - di conseguenza la dimensione del testo è diversa tra i sistemi.

Puoi provare a impostare il carattere sullo stesso carattere e vedere come funziona, magari provare diversi caratteri per verificare dove la differenza è minima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top