2009-04-30 12 views

Respuesta

17

La razón de esto es el sistema anti-aliasing que se extiende la línea a través de múltiples píxeles si no se alinea con los pixeles dispositivo físico.

WPF es resoultion independiente. Esto significa que especifica el tamaño de un elemento de interfaz de usuario en pulgadas, no en píxeles. Una unidad lógica en WPF es 1/96 de pulgada. Se elige esta escala, porque la mayoría de las pantallas tienen una resolución de 96 ppp. Entonces, en la mayoría de los casos, 1 unidad lógica coincide con 1 píxel físico. Pero si la resolución de la pantalla cambia, esta regla ya no es válida.

Todos los controles WPF proporcionan una propiedad SnapsToDevicePixels. Si se establece en verdadero, el control garantiza que todos los bordes se dibujen de forma directa en los píxeles del dispositivo físico. Pero desafortunadamente esta característica solo está disponible en el nivel de control.

Fuente: Draw lines excactly on physical device pixels

+0

Tenga en cuenta que la propiedad SnapToDevicePixels tiene ningún efecto sobre los glifos de texto. Pruebe esto con TextBlock para ver a qué me refiero. Desafortunadamente estamos atrapados con texto borroso por ahora. –

+1

Hay más acerca de las fuentes borrosas aquí: http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions – Spoike

2

Quick Fix:

Use estas opciones en cada contenedor de la raíz a tu control borroso

 UseLayoutRounding="True" 
     RenderOptions.BitmapScalingMode="NearestNeighbor" 
     SnapsToDevicePixels="True" 
     RenderOptions.ClearTypeHint="Enabled" 

Explicación:

UseLayoutRounding = true arregla problemas de diseño de subpixel . A menudo ocurren porque, p. Los controles de tamaño de efectos son algo entre píxeles.

RenderOptions.BitmapScalingMode = NearestNeighbor arregla el muestreo borroso de bitmaps. Los mapas de bits se usan cuando se usan efectos u otras técnicas. Cuando se vuelven a aplicar al contenedor o al control, pueden terminar entre píxeles y, por lo tanto, interpolar los píxeles del mapa de bits.

SnapsToDevicePixels = "true" correcciones verticales y horizontales polígonos, líneas y rectángulos que se queden entre medio de pixeles

RenderOptions.ClearTypeHint = "Habilitado" vuelve a habilitar cleartype en texto. Se desactiva muy fácilmente por efectos o siempre que el procesador no sepa el fondo exacto de un texto.

Debe usarlo en cada contenedor, porque a veces, por ejemplo, según las plantillas de datos, estas opciones están predeterminadas nuevamente para los subcontroles.

+1

Adición: Usted podría encontrarse con problemas visuales en pantallas 4K o en otras ocasiones. Por ejemplo, es posible que el texto se rompa en el centro o que falten algunos píxeles por completo, incluso las líneas de 1 píxel completas pueden volverse invisibles. Necesita técnicas adicionales para solucionar estos problemas. – ecreif

Cuestiones relacionadas