WPF DPI渲染问题有两个边框

时间:2013-08-21 10:18:05

标签: wpf dpi

环境

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的抗锯齿和出血问题,但内边缘似乎通常在右侧和底侧有1px的边距

2)以下代码无助于解决此问题:

<Grid Width="20" Height="20">
    <Border BorderThickness="1" BorderBrush="Red" />
    <Border BorderThickness="1" BorderBrush="Blue" Margin="1" />
</Grid>

3)使用矩形代替Borders也存在同样的问题。

4)在VirtualBox中运行的来宾Win 7下,问题仍然存在。

5)编辑 - 这看起来好一点,因为没有内边距,但外边框是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>

问题(S)

如何让边框在没有内边距或防止/出血的情况下完美像素?

当DPI不是96时,我不能使用代码隐藏来重写边框大小。我必须坚持使用XAML,因为我正在尝试创建矢量图标(基于XAML)。

1 个答案:

答案 0 :(得分:3)

Bravo Microsoft - https://connect.microsoft.com/VisualStudio/feedback/details/798513/wpf-dpi-rendering-issues-with-two-borders

然而,这个问题不会得到解决或解决。