4

环境

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) 使用 Rectangles 而不是 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>

问题)

如何在没有任何内边距或抗锯齿/出血的情况下使边框达到像素完美?

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

4

1 回答 1

3

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

再一次,这个问题将不会得到解决或修复。

于 2013-09-20T14:41:31.457 回答