Problème de résolution d’écran dans WPF?

Je vais détecter la résolution avec le code suivant dans WPF:

double height = System.Windows.SystemParameters.PrimaryScreenHeight; double width = System.Windows.SystemParameters.PrimaryScreenWidth; 

La résolution actuelle de mon écran est 1920 * 1200, mais la height est 960.0 et la width est 1536.0 !!!

Qu’est ce qui ne va pas avec ça ?
Merci d’avance.

N’oubliez pas que tous les emplacements et toutes les tailles WPF sont en virgule flottante avec une unité de 1/96 de pouce. Pas de pixels. Cela rend la résolution de vos conceptions de fenêtre indépendante. Faire le calcul: hauteur = 960/96 = 10 pouces. Avec votre carte vidéo définie sur 120 DPI (120/96 = 125%): 10 * 120 = 1200 pixels. Même chose pour la largeur: 1536/96 * 120 = 1920 pixels.

System.Windows.Forms fonctionne en unités de pixels. Vous obtenez moins de 1050 pour la hauteur car elle soustrait la hauteur de la barre des tâches. Mais pour WPF, vous voulez toujours travailler avec 1/96 “, jamais avec des pixels.

Pour une mise en œuvre encore plus robuste, vous devez calculer les facteurs de DPI sur votre système et utiliser ces facteurs. Une valeur DPI normale est 96, mais certains moniteurs peuvent avoir des valeurs différentes. Considérez que votre code peut être en cours d’exécution sur un moniteur dont la valeur DPI est différente de 96. Considérez ce code:

  private static void CalculateDpiFactors() { Window MainWindow = Application.Current.MainWindow; PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow); Masortingx m = MainWindowPresentationSource.CompositionTarget.TransformToDevice; thisDpiWidthFactor = m.M11; thisDpiHeightFactor = m.M22; } 

Vous pouvez ensuite utiliser ces ratios pour obtenir les valeurs finales:

 CalculateDpiFactors(); double ScreenHeight = SystemParameters.PrimaryScreenHeight * thisDpiHeightFactor; double ScreenWidth = SystemParameters.PrimaryScreenWidth * thisDpiWidthFactor; 

Les valeurs de ScreenHeight et ScreenWidth doivent alors correspondre à ce que vous voyez dans la fenêtre Propriétés de votre moniteur.

Essayez SystemParameters.FullPrimaryScreenWidth et FullPrimaryScreenHeight, je crois que PrimaryScreenWidth and Height renvoie la taille de la fenêtre client disponible après avoir supprimé la barre des tâches et les autres bandes de bureau de votre écran.

Si vous cochez “Utiliser la mise à l’échelle DPI de style Windows XP”, la valeur renvoyée de “Screen.PrimaryScreen.Bounds” est correcte. Sinon, la valeur renvoyée est proportionnellement réduite par la valeur PPP (qui est la valeur par défaut).

Pour trouver la case “Utiliser le redimensionnement DPI de style Windows XP”, développez le lien “Pour clarifier le texte et les éléments à l’écran dans les programmes qui ne sont pas conçus pour un DPI élevé” dans le lien suivant: http://windows.microsoft. com / fr-fr / windows-vista / Créez le texte sur votre écran plus ou moins grand

S’il vous plaît appeler cela après que votre Windows est chargé.

  public static class Ext { public static Size GetNativePrimaryScreenSize(this Window window) { PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(window); Masortingx m = mainWindowPresentationSource.CompositionTarget.TransformToDevice; var dpiWidthFactor = m.M11; var dpiHeightFactor = m.M22; double screenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor; double screenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor; return new Size(screenWidth, screenHeight); } } 

essayez ces..je crois que cela pourrait corriger l’erreur …..

System.Windows.Form1.Screen.PrimaryScreen.Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;