Как сделать обводку WPF Polygon прочной? - PullRequest
0 голосов
/ 30 января 2012

Если вы посмотрите на приведенный ниже 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

Есть ли способ нарисовать многоугольник со сплошными / чистыми краями?

Ответы [ 3 ]

4 голосов
/ 28 ноября 2013

Это старый вопрос, но если кто-то случайно натолкнется на это со стороны Google, вот решение, которое сработало для меня:

Добавьте RenderOptions.EdgeMode = "Aliased" в свой многоугольник:

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

Вот Документация MSDN для него.

1 голос
/ 30 января 2012

Полупрозрачность, которую вы видите, не вызвана не сплошной границей или границей, которая недостаточно толстая, но сглаживанием.

Установка SnapsToDevicePixels="True" не решит это, поскольку прямоугольник - это чертежобъект, поэтому вам нужно будет использовать 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 покрасит их все немного.

1 голос
/ 30 января 2012

Установите толщину:

StrokeThickness = "5"

Также может потребоваться привязка к пикселям устройства:

SnapsToDevicePixels = "True"

...