0

如果您查看下面的 XAML,它会创建两个矩形。

XAML

<Grid>
    <Rectangle Height="80" Width="300" Fill="Maroon"
        HorizontalAlignment="Center" VerticalAlignment="Bottom">
    </Rectangle>
    <Rectangle Height="300" Width="50" Fill="LightSteelBlue"
        HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="50,0">
    </Rectangle>
    <Polygon Fill="LightSteelBlue" Stroke="LightSteelBlue"
        HorizontalAlignment="Center" VerticalAlignment="Bottom">
        <Polygon.Points>
            <Point X="0" Y="300"/>
            <Point X="50" Y="300"/>
            <Point X="50" Y="0"/>
            <Point X="0" Y="0"/>
            <Point X="0" Y="300"/>
        </Polygon.Points>
    </Polygon>
</Grid>

多边形是用非实心边框绘制的,即当您放大图像时,您将看到抗锯齿边缘。有趣的是,当你画一个矩形时,你没有得到这些(左边的矩形,右边的多边形):

图片 http://www.barramsoft.com/pub/images/BarBorders2.png

有没有办法用实心/干净的边缘绘制多边形?

4

3 回答 3

4

这是一个老问题,但如果有人碰巧从谷歌那里得到这个,这里的解决方案对我有用:

将 RenderOptions.EdgeMode="Aliased" 添加到您的多边形:

<Polygon ...
         RenderOptions.EdgeMode="Aliased">
    <Polygon.Points>
        ...
    </Polygon.Points>
</Polygon>

这是它的MSDN 文档

于 2013-11-28T02:51:43.093 回答
1

设置厚度:

行程厚度=“5”

此外,您可能需要捕捉到设备像素:

SnapsToDevicePixels="真"

于 2012-01-30T19:07:23.980 回答
1

您看到的半透明不是由非实心边框或不够厚的边框引起的,而是由抗锯齿引起的。

设置SnapsToDevicePixels="True"不会解决此问题,因为矩形是绘图对象,因此您必须使用指南

另一种方法是“修复”它是将线条放在像素的中间:

     <Polygon.Points>
            <Point X="0.5"
                   Y="300.5" />
            <Point X="50.5"
                   Y="300.5" />
            <Point X="50.5"
                   Y="0.5" />
            <Point X="0.5"
                   Y="0.5" />
            <Point X="0.5"
                   Y="300.5" />
        </Polygon.Points>

当像这样给出坐标时,更容易决定要打开哪些像素。如果坐标在两个(或更多)像素之间,WPF 将对所有像素进行着色。

于 2012-01-30T19:14:54.873 回答