Question

Pourquoi le rendu de WPF est-il différent sous Windows XP par rapport à Windows 7?

J'utilise .NET SP1 sur les deux ordinateurs ..

Ma présentation ressemble à cette fenêtre sans barre d’outils et configurée pour être agrandie de manière à s’adapter à tout l’écran.

Sous cela, j'ai un ensemble Viewbox pour utiliser Stretch: Uniform, et sous cela, j'ai mon LayoutRoot.

J'espérais ainsi obtenir la même disposition sur tous les ordinateurs, mais il semble que le rendu ne soit pas exactement identique sous Windows XP. Certains éléments sont un peu plus petits et la mise en page n'est pas très belle.

J'ai essayé de modifier ma résolution sur mon ordinateur Windows 7 pour qu'elle soit identique à celle de Windows XP, et la présentation reste identique à celle à laquelle il est supposé.

Les deux ordinateurs utilisent une résolution de 96 ppp.

Windows XP

Windows 7

Était-ce utile?

La solution

Mon expérience:

Je ne suis pas sûr que ce soit le problème. J'ai remarqué que Windows 7 utilisait l'accélération matérielle pour dessiner l'application WPF. Windows XP ne le fait pas.

Vous pouvez vérifier si c'est le cas en utilisant quelque chose comme ceci:

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

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

Votre couche de rendu doit renvoyer 2 si elle utilise le dessin accéléré au matériel complet. 0 = logiciel, 1 = quelque chose au milieu si devinez

Autres conseils

Il m'a fallu environ trois heures pour enfin comprendre ceci - après beaucoup de travail de détective, mais maintenant, c'est un pixel parfait!

Il apparaît que WPF sous Windows XP et WPF sous Windows 7 ont non seulement une police par défaut différente, ainsi qu'une taille de la police par défaut .

  • J'ai rencontré un problème de rendu des polices différent sous Windows XP par rapport à Windows 7. C'était assez critique puisque le résultat final était destiné à l'imprimante, et ils devaient être identiques. Il est apparu initialement que le problème était une différence d'espacement des lignes.
  • Oui, j'avais la même police exacte installée sous Windows XP que celle que j'utilisais sous Windows <7>.
  • Oui, j'ai essayé une police très générique (Arial) et j'ai toujours les mêmes problèmes.
  • Oui - Même DPI sur les deux machines.
  • Oui - Même résultat, que ce soit sur une machine virtuelle (mode Windows) ou sur un ordinateur Windows réel
  • .

J'ai finalement découvert que les polices pour lesquelles je spécifiais une taille explicite semblaient identiques sous Windows XP, et seules celles pour lesquelles je ne spécifiais pas de taille explicite étaient différentes.

Alors voici comment je l'ai corrigé dans mon MainWindow.xaml - avec un ContentControl pour définir une taille par défaut:

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

Remarque: si vous utilisez Assemblage , vous devrez peut-être pour entrer FontSize = " 12 " à la main. Si vous le sélectionnez dans le concepteur de propriétés, il sera supprimé, car il considère que 12 est déjà la valeur par défaut!

Comme je disais que ma destination était l’imprimante - je devais donc faire de même pour le contrôle en cours d’impression.

Où puis-je définir cette taille de police par défaut? En tout état de cause, le rendu des pixels est parfait sous Windows XP et Windows 7, et ils ne diffèrent que par les différences d’anticrénelage cleartype.

Remarque: UseLayoutRounding ne fait pas partie de ma solution, mais je l'utilise toujours aussi sur mon contrôle racine.

Les polices par défaut sont différentes

Créer un bouton WPF

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

et le code derrière:

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

Exécutez cette opération sur chaque système d'exploitation et vous verrez que les polices par défaut pour XP et Windows7 sont différentes.

La police par défaut pour XP est la taille 11 «Tahoma»

La police par défaut pour Windows 7 est la taille «Segoe UI» 12

Les différentes versions de Windows ont des polices par défaut différentes (également différentes versions des mêmes polices) et des moteurs de rendu des polices différents. Par conséquent, la taille du texte est différente entre les systèmes.

Vous pouvez essayer de définir la police sur la même police et voir comment elle fonctionne. Essayez peut-être plusieurs polices pour vérifier où la différence est la plus petite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top