Comment puis-je obtenir le DPI dans WPF?

Comment puis-je obtenir le DPI dans WPF?

  • Pourquoi auriez-vous besoin de le faire dans WPF, de toutes choses, et qu'allez-vous faire avec la valeur une fois que vous l'obtenir? WPF n'a aucun moyen de spécifier des coordonnées dans l'appareil dépendant de pixels. Il peut sembler que ses dimensions sont en pixels, mais ceux-ci sont "des pixels virtuels" - de la taille d'un pixel comme il est à 96 PPP. Il va grandir ou rétrécir si vous modifiez le système de DPI, donc une "d'un pixel d'épaisseur" de la ligne tracée à l'aide de WPF peut pas être physiquement d'un pixel d'épaisseur.
  • Parce que je veux ronde pixels
  • Si vous voulez pixel-positionnement précis au physique de pixel limites, vous êtes beaucoup mieux de ne pas l'utilisation de WPF dans la première place. Ce n'est pas le scénario pour lequel il est conçu, et il n'y a absolument aucune garantie quant à la manière dont WPF coordonnées peuvent être arrondis etc. Si vous voulez juste les sommets de se casser le plus proche de physique pixels, utilisez UseLayoutRounding de la propriété. Si vous voulez dessiner une ligne qui est exactement de 10 pixels de long, puis oublier de WPF.
  • N' "SnapToDevicePixels" pas de travail pour vous?
  • SnapToDevicePixels ne fonctionne pas très bien. En fait, Microsoft a introduit UseLayoutRounding pour cette raison. Mais UseLayoutRounding est "tout ou rien". Vous ne pouvez pas le tour de certains de coordonnées, mais pas d'autres.
  • Un des plus fréquemment utilisés scénario est de choisir le fichier de curseur avec la taille appropriée pour l'utilisation dans WPF. WPF ne supporte pas le multi-PPP curseur de fichiers, de sorte que vous aurez besoin de charger les fichiers de curseur en fonction de l'écran DPI. Le soutien va être ajouté dans .NET 4.6.

InformationsquelleAutor tom greene | 2009-12-17