Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个边界的WPF DPI渲染问题_Wpf_Dpi - Fatal编程技术网

具有两个边界的WPF DPI渲染问题

具有两个边界的WPF DPI渲染问题,wpf,dpi,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> 3) 使用矩形代替边框也有同样的问题 4) 在VirtualBox中运行guest

环境

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>
3) 使用矩形代替边框也有同样的问题

4) 在VirtualBox中运行guest 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)。

Bravo Microsoft-


同样,这个问题将不会得到解决或修复。

您是否尝试过使用画布多边形/路径和相对坐标来完成此任务?@VidasVasiliauskas-查看我在第5步中的编辑(我已经尝试过了)还有一个想法-windows 8缩放可能是一个问题,我知道您已经在来宾操作系统上尝试过这一点,但我想知道它是如何通过虚拟化和本机操作系统实现的。众所周知,win 8缩放会在某些缩放比例上导致像素加倍-听起来很可能是您出现问题的原因。@VidasVasiliauskas-在本机win 7机器上验证过,所有测试都会产生与以前完全相同的结果。我当时没有主意。。。希望您能解决此问题并分享解决方案!
<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>