.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):
- La documentación de MSDN para la propiedad UIElement.SnapsToDevicePixels.
- documentation
- Aquí está el viejo y clásico post de Dwayne Need sobre imágenes borrosas.
- A veces, BitmapScalingMode ayuda con la claridad de la imagen.
- Una excelente publicación de blog que te muestra cómo usar realmente SnapsToDevicePixels. Puede ser complicado.
- Una publicación del blog del equipo de texto de WPF sobre todas las mejoras que agregaron a WPF 4.0 para ayudar a la claridad del texto.
- Otra entrada de blog del equipo de WPF Text sobre el redondeo del diseño.
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.