Проблемы рендеринга WPF DPI с двумя границами
Enviroment
Win 8, VS 2012, .NET 4, WPF, собственное разрешение экрана 1920x1080 @ 96DPI
XAML
<Border BorderThickness="1" BorderBrush="Red" Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Blue" />
</Border>
Проблема
Границы выглядят хорошо, когда DPI равен 96, но если я изменю DPI на 120, границы больше не будут идеально выровнены по пикселям.
Что я пробовал
1) Установка следующих свойств -RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True"
- на обеих границах смягчает проблемы сглаживания и кровотечения из более высокого DPI, но внутренняя граница, кажется, имеет отступ в 1 пиксель, обычно с правой и нижней сторон.
2) Следующий код не помогает обойти проблему:
<Grid Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Red" />
<Border BorderThickness="1" BorderBrush="Blue" Margin="1" />
</Grid>
3) Использование прямоугольников вместо границ имеет ту же проблему.
4) Проблема также сохраняется при гостевой Win 7, запущенной в VirtualBox.
5)редактировать - Это выглядит немного лучше, поскольку здесь нет внутреннего поля, но внешняя граница имеет толщину 2 пикселя:
<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>
Вопросов)
Как сделать так, чтобы границы были идеальными для пикселей без каких-либо внутренних полей или сглаживания / кровотечения?
Я не могу использовать выделенный код для переделки размеров границ, когда DPI отличается от 96. Я должен придерживаться только XAML, потому что я пытаюсь создавать векторные иконки (на основе XAML).