如何使WPF多边形的边框笔划固定?

时间:2012-01-30 18:56:52

标签: wpf opacity polygon brush stroke

如果查看下面的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>

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

Image http://www.barramsoft.com/pub/images/BarBorders2.png

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

3 个答案:

答案 0 :(得分:4)

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

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

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

这是MSDN Documentation

答案 1 :(得分:1)

设置厚度:

StrokeThickness = “10”

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

SnapsToDevicePixels = “真”

答案 2 :(得分:1)

您看到的半透明度不是由非实体边框或边框造成的,而是边缘不够厚但是反锯齿。

设置SnapsToDevicePixels="True"无法解决此问题,因为矩形是一个绘图对象,因此您必须use Guidelines

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

     <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将为它们全部着色。