环境
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)。