环境
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)。
答案 0 :(得分:3)
Bravo Microsoft - https://connect.microsoft.com/VisualStudio/feedback/details/798513/wpf-dpi-rendering-issues-with-two-borders
然而,这个问题不会得到解决或解决。