Problemas de renderização de DPI do WPF com duas bordas
Meio ambiente
Win 8, VS 2012, .NET 4, WPF, resolução nativa de tela 1920x1080 @ 96DPI
XAML
<Border BorderThickness="1" BorderBrush="Red" Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Blue" />
</Border>
O problema
As bordas parecem bem quando o DPI é 96, mas se eu alterar o DPI para 120, as bordas não estarão mais perfeitamente alinhadas com pixels.
O que eu tentei
1) Definindo as seguintes propriedades -RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True"
- em ambas as bordas, atenua os problemas de suavização e sangramento do DPI mais alto, mas a borda interna parece ter uma margem de 1 px geralmente nos lados direito e inferior.
2) O código a seguir não ajuda a contornar o problema:
<Grid Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Red" />
<Border BorderThickness="1" BorderBrush="Blue" Margin="1" />
</Grid>
3) Usando retângulos em vez de bordas tem o mesmo problema.
4) O problema também persiste sob um convidado Win 7 em execução no VirtualBox.
5)Editar - Isso parece um pouco melhor, pois não há margem interna, mas a "borda" externa é de 2 pixels de espessura:
<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>
Questões)
Como faço para que as bordas fiquem com pixels perfeitos sem margens internas ou anti-alising / bleeding?
Eu não posso usar code-behind para retrabalhar os tamanhos de bordas quando o DPI é diferente de 96. Eu devo me ater apenas ao XAML, porque estou tentando criar ícones vetoriais (baseados em XAML).