EnviromentWPF DPI рендеринга проблемы с двумя границами
Win 8, VS 2012, .NET 4, WPF, экран родное разрешение 1920х1080 @ 96DPI
Xaml
<Border BorderThickness="1" BorderBrush="Red" Width="20" Height="20">
<Border BorderThickness="1" BorderBrush="Blue" />
</Border>
Проблема
Границы выглядят f когда DPI равно 96, но если я изменю DPI на 120, границы уже не будут полностью выровнены по пикселям.
То, что я пытался
1) Установка следующих свойств - RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True" UseLayoutRounding="True"
- на обеих границах, смягчает сглаживанием и кровоточащие проблемы с более высоким DPI, но внутренняя граница, кажется, есть запас 1px обычно на правой и нижней сторонах.
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) Edit - Это выглядит немного лучше, в том, что нет никакого внутреннего края, но внешняя "граница" является 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>
Вопрос (ы)
Как получить границы для идеального пикселя без каких-либо внутренних полей или против сглаживания/кровотечения?
Я не могу использовать код для обработки размеров границ, когда DPI отличен от 96. Я должен придерживаться только XAML, потому что я пытаюсь создать векторные значки (на основе XAML).
Вы пытались использовать полигон/путь холста с относительными координатами для выполнения такой задачи? –
@VidasVasiliauskas - проверить мое редактирование на шаге 5 (что я пробовал) – Marko
Ну еще одна идея - масштабирование в окнах 8 может быть проблемой, я понимаю, что вы пробовали это на гостевой ОС, но мне интересно, как это переводится через виртуализацию и родной ОС. Как известно, выигрыш 8 масштабирования может привести к удвоению пикселей в некоторых масштабах - звучит как очень возможная причина для вашей проблемы. –