.net wpf snapstodevicepixels

.net - ¿Cuándo debo usar SnapsToDevicePixels en WPF 4.0?



(4)

Acabo de notar que es muy útil para las fronteras. Información adicional here .

<Style TargetType="Border" > <Setter Property="SnapsToDevicePixels" Value="True" /> </Style>

¿Alguien puede sugerir una guía sobre cuándo usar SnapsToDevicePixels en WPF 4.0?

¿Debería usarse solo ocasionalmente si hay un problema, generosamente en una aplicación, solo en ciertos controles o qué?


Buenas respuestas de Spencer y Martin sobre cuándo alinear sus píxeles.

En cuanto a cómo : también señalaría que uno debería en WPF 4.0 intentar usar la propiedad UseLayoutRounding lugar de SnapsToDevicePixels .

UseLayoutRounding hace que lo que está haciendo sea compatible con Silverlight ( SnapsToDevicePixels no está disponible en Silverlight) ... y Microsoft también está fomentando el uso de UseLayoutRounding sobre SnapsToDevicePixels en su documentation .

¿Cuál es la diferencia entre los dos? Bueno, una gran diferencia es que UseLayoutRounding ocurre durante la fase de diseño, mientras que SnapsToDevicePixels ocurre durante la fase de renderizado. Esto me hace especular que UseLayoutRounding es probablemente una manera más UseLayoutRounding de ir (aunque no he confirmado esto, sin embargo).

Todo lo que se dice, todavía habrá razones para utilizar SnapsToDevicePixels . De hecho, la documentación de MSDN apunta a uno. Agregaré otro: solo con SnapsToDevicePixels puede usar las pautas para un control preciso.

Aquí hay algunos recursos sobre este tema (es decir, ajuste de píxeles y claridad con imágenes, texto y elementos visuales):

Heh Sé que mi respuesta fue un poco más de lo que pedía ... pero este concepto (es decir, la independencia de resolución y los problemas resultantes que conlleva y cómo superarlos) a menudo puede ser un punto de frustration al trabajar con WPF. Como mínimo, quería señalarle la nueva propiedad de WPF 4.0, UseLayoutRounding .

ACTUALIZAR

Solo tengo que agregar ya que he visto esto una y otra vez ... a veces SnapsToDevicePixels funciona cuando UseLayoutRounding no lo hace. Desearía poder explicar por qué este es el caso, pero definitivamente intente UseLayoutRounding primero y si eso no funciona, no dude en probar SnapsToDevicePixels .

¡Esa línea es tan aguda que puede cortarte!


Se debe utilizar en controles o áreas donde la colocación de los píxeles tenga un significado. Los controles relacionados con el lienzo de una aplicación de dibujo serían un ejemplo. ¿Alguna vez has visto el mapa de un disco fragmentado? Este podría ser otro ejemplo.

Una excepción que se me ocurre es cuando estás usando líneas divisoras de algún tipo. Si bien la mayoría de las personas espera que las líneas de borde sean sólidas si esta configuración está desactivada, pueden verse borrosas y distraídas.

Básicamente, si los bordes borrosos = malos, apáguelo.


Un caso es si está mostrando una imagen o un video. Si no se ajusta a los píxeles del dispositivo (es decir, a los píxeles de la pantalla de video), se usa algún algoritmo (interpolación, suavizado) para colocar los píxeles de la imagen "entre" los píxeles de la pantalla, y lo que se muestra no se verá Tan bueno como lo haría la imagen original. La imagen perdería algo de nitidez.