64 votes

Quand devrais-je utiliser SnapsToDevicePixels dans WPF 4.0?

Quelqu'un peut-il suggérer une ligne directrice sur le moment d'utiliser SnapsToDevicePixels dans WPF 4.0?

Devrait-il être utilisé occasionnellement s'il y a un problème, généreusement dans une application, uniquement sur certains contrôles ou quoi?

91voto

cplotts Points 7630

Les bonnes réponses par Spencer et Martin à la lors de à aligner les pixels.

Comme pour le comment: je tiens également à souligner que l'on doit en WPF 4.0 essayez d'utiliser la propriété UseLayoutRounding au lieu de SnapsToDevicePixels.

UseLayoutRounding fait ce que vous faites compatible avec Silverlight (SnapsToDevicePixels n'est pas disponible en Silverlight) ... et Microsoft est aussi encourager l'utilisation de UseLayoutRounding sur SnapsToDevicePixels dans sa documentation.

Quelle est la différence entre les deux? Ainsi, une grande différence est que UseLayoutRounding se produit pendant la mise en phase de SnapsToDevicePixels se produit au cours de la phase de rendu. Cela me fait spéculer que UseLayoutRounding est probablement l'un des plus performants de chemin à faire (je n'ai pas confirmé ce, tout de même).

Tout cela étant dit, il y aura toujours des raisons de l'utilisation d'SnapsToDevicePixels. En fait, la documentation MSDN points à un. Je vais en ajouter une autre: c'est seulement avec SnapsToDevicePixels que vous pouvez utiliser les lignes directrices pour un contrôle précis.

Voici quelques ressources sur ce sujet (c'est à dire d'alignement des pixels et de la clarté des images, des textes et visuels):

Heh. Je sais que ma réponse était un peu plus que ce que vous demandez ... mais ce concept (c'est à dire l'indépendance de la résolution, et les problèmes qu'elle apporte et comment l'obtenir sur eux) peut souvent être un point de frustration lorsque l'on travaille avec WPF. À tout le moins, je voulais point vous à la nouvelle WPF 4.0 propriété, UseLayoutRounding.

Mise à JOUR

Je dois ajouter que j'ai vu cela encore et encore ... parfois SnapsToDevicePixels fonctionne quand UseLayoutRounding ne l'est pas. Je souhaite que je pourrais mettre un doigt sur le pourquoi c'est le cas, mais certainement essayer UseLayoutRounding d'abord, et si cela ne fonctionne pas, n'hésitez pas à essayer SnapsToDevicePixels.

Cette ligne est si forte qu'il peut vous couper!

8voto

Spencer Ruport Points 24589

Il doit être utilisé sur des boutons ou des zones où le placement des pixels a un sens. Les contrôles relatifs à la toile d'une application de dessin serait un exemple. Avez-vous déjà vu la carte de la fragmentation du disque? Ce pourrait être un autre exemple.

Une exception est, je pense, lorsque vous êtes en utilisant un diviseur de lignes d'une certaine sorte. Alors que la plupart des gens s'attendent à la frontière lignes pour être solide si ce paramètre est désactivé, ils peuvent regarder floue et distrayant.

En gros, si floue bords = mauvais, puis l'éteindre.

6voto

Warpin Points 2577

Un cas est si vous affichez une image ou une vidéo. Si vous n'accrochez pas aux pixels de l'appareil (c'est-à-dire aux pixels de l'écran vidéo), un algorithme (interpolation, anti-aliasing) est utilisé pour positionner les pixels de votre image "entre" les pixels de votre écran. aussi bon que l'image d'origine serait. L'image perdrait de la netteté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X