环境
Windows 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) 使用矩形代替边框也存在同样的问题。
4) 在VirtualBox中运行的Win 7客户机下,问题仍然存在。
5) 编辑 - 现在看起来好一些了,因为没有内部边距,但外部的“边框”厚度为2像素:
<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 的矢量图标。