2013-08-21 2 views
4

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).

+0

Вы пытались использовать полигон/путь холста с относительными координатами для выполнения такой задачи? –

+0

@VidasVasiliauskas - проверить мое редактирование на шаге 5 (что я пробовал) – Marko

+0

Ну еще одна идея - масштабирование в окнах 8 может быть проблемой, я понимаю, что вы пробовали это на гостевой ОС, но мне интересно, как это переводится через виртуализацию и родной ОС. Как известно, выигрыш 8 масштабирования может привести к удвоению пикселей в некоторых масштабах - звучит как очень возможная причина для вашей проблемы. –

ответ

Смежные вопросы