Problemas de representación de WPF DPI con dos bordes
Medio ambiente
Win 8, VS 2012, .NET 4, WPF, resolución nativa de pantalla 1920x1080 @ 96DPI
XAML
<Border BorderThickness="1" BorderBrush="Red" Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Blue" />
</Border>
El problema
Los bordes se ven bien cuando el DPI es 96, pero si cambio el DPI a 120, los bordes ya no están perfectamente alineados a los píxeles.
Lo que he intentado
1) Configuración de las siguientes propiedades -RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True"
- en ambos bordes, mitiga los problemas de suavizado y sangrado del DPI mayor, pero el borde interno parece tener un margen de 1px generalmente en los lados derecho e inferior.
2) El siguiente código no ayuda a solucionar el problema:
<Grid Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Red" />
<Border BorderThickness="1" BorderBrush="Blue" Margin="1" />
</Grid>
3) El uso de rectángulos en lugar de bordes tiene el mismo problema.
4) El problema también persiste en un Win 7 invitado que se ejecuta en VirtualBox.
5)Editar - Esto se ve un poco mejor, ya que no hay margen interno, pero el "borde" exterior tiene un grosor de 2px:
<Canvas Width="20" Height="20">
<Polygon Points="0,0 20,0, 20,20, 0,20" StrokeThickness="1" Stroke="Red" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True" />
<Polygon Points="1,1 19,1, 19,19, 1,19" StrokeThickness="1" Stroke="Blue" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True" />
</Canvas>
Pregunta (s)
¿Cómo puedo hacer que los bordes sean píxeles perfectos sin márgenes internos o anti-alising / sangrado?
No puedo usar el código subyacente para volver a trabajar los tamaños de los bordes cuando el DPI no es 96. Debo limitarme a XAML solo, porque estoy tratando de crear iconos vectoriales (basados en XAML).