Как сделать формы WPF полностью заполненными - PullRequest
3 голосов
/ 09 марта 2012

У меня есть такой путь,

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
    <Path.Data>
    <PathGeometry>
        <PathFigure StartPoint="6.0,12.5" >
            <LineSegment Point="50.0,6.0"></LineSegment>
            <LineSegment Point="94.0,12.5"></LineSegment>
            <LineSegment Point="60.0,19.0"></LineSegment>
            <LineSegment Point="20.0,19.0"></LineSegment>
            <LineSegment Point="6.0,12.5"></LineSegment>
        </PathFigure>
        <PathFigure StartPoint="7.97852754592896,12.2077178955078">
            <ArcSegment IsLargeArc="True" Point="4.02147245407104,12.7922821044922" RotationAngle="171.59663391113281" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
            <ArcSegment IsLargeArc="True" Point="7.97852754592896,12.2077178955078" RotationAngle="171.59663391113281" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
        </PathFigure>
        <PathFigure StartPoint="51.9785270690918,6.29228210449219">
            <ArcSegment IsLargeArc="True" Point="48.0214729309082,5.70771789550781" RotationAngle="188.40336608886719" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
            <ArcSegment IsLargeArc="True" Point="51.9785270690918,6.29228210449219" RotationAngle="188.40336608886719" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
        </PathFigure>
    </PathGeometry>
  </Path.Data>
</Path>

Он представляет собой многоугольник с несколькими кругами в нескольких углах.

Один из кругов заполнен неправильно.Это часть круга, покрывающего многоугольник.

Это напоминает мне графику, использующую XOR.Поместите два поверх друг друга, и они отменяются.

Если я удаляю многоугольник (отрезки), то он работает нормально.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

При просмотре вашего пути и использовании свойства PathGeometry.FillRule Я получаю одинаковые результаты для обоих вариантов.

Используется ненулевой FilRule с одним Path.

Единственный способ, которым я смог получить результаты, которые, как я полагаю, вы ищете, это использовать Nonzero FillRule и создать отдельный путь для проблемы PathFigure.

Это использует ненулевое FillRule с отдельным Path для задачи PathFigures.

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
    <Path.Data>
        <PathGeometry FillRule="Nonzero">
            <PathFigure StartPoint="6.0,12.5" >
                <LineSegment Point="50.0,6.0"></LineSegment>
                <LineSegment Point="94.0,12.5"></LineSegment>
                <LineSegment Point="60.0,19.0"></LineSegment>
                <LineSegment Point="20.0,19.0"></LineSegment>
                <LineSegment Point="6.0,12.5"></LineSegment>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>
<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
    <Path.Data >
        <PathGeometry FillRule="Nonzero">
            <PathFigure StartPoint="51.9785270690918,6.29228210449219">
                <ArcSegment IsLargeArc="True" Point="48.0214729309082,5.70771789550781" RotationAngle="188.40336608886719" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
                <ArcSegment IsLargeArc="True" Point="51.9785270690918,6.29228210449219" RotationAngle="188.40336608886719" Size="2,4" SweepDirection="Counterclockwise"  ></ArcSegment>
            </PathFigure>
            <PathFigure StartPoint="7.97852754592896,12.2077178955078" >
                <ArcSegment IsLargeArc="True" Point="4.02147245407104,12.7922821044922" RotationAngle="171.59663391113281" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
                <ArcSegment IsLargeArc="True" Point="7.97852754592896,12.2077178955078" RotationAngle="171.59663391113281" Size="2,4" SweepDirection="Counterclockwise"></ArcSegment>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>
0 голосов
/ 09 марта 2012

В вашем элементе PathGeometry попробуйте установить

FillRule="NonZero"

По умолчанию EvenOdd дает описываемое вами поведение XOR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...