Эквивалент IsFilled = "false" для PathFigure в мини-языке Path (Silverlight / WPF) - PullRequest
1 голос
/ 18 февраля 2011

Я пытаюсь найти эквивалент IsFilled="False", который используется в PathGeometry, но для Path Mini .

left is Path Mini and right is PathGeometry

Вы можете видеть, что два пути ниже идентичны, за исключением того, что путь с геометрией имеет IsFilled="False" во втором <PathGeometry>.<PathGeometry.Figures>.<PathFigure>. Это желаемое поведение, но я хотел бы иметь его для Path Mini (т.е. в первом <Path>). Я просмотрел документацию и, похоже, ничего не могу найти на ней, поскольку кажется, что Path Mini - это не набор цифр.

Насколько я понимаю, все фигуры / геометрии будут преобразованы в path mini во время выполнения, поэтому есть ли способ отразить скомпилированный XAML, чтобы увидеть, как интерпретатор отображает тот, у которого PathGeometry, в Path Mini?

<Canvas Background="#FDB" Width="800" Height="600">

  <!-- this is the LEFT-HAND Path in the picture above -->
  <Path Canvas.Left="100" Canvas.Top="100"
     Stroke="#385D8A" StrokeThickness="2" StrokeLineJoin="Round" Fill="#4F81BD"
     Data="M0,0L102,0L102,102L0,102Z M46.15,49.01L-73.36,130.99L-96.42,-96.12L109.35,355.18">
  </Path>

  <!-- this is the RIGHT-HAND Path in the picture above -->
  <Path Canvas.Left="300" Canvas.Top="100" Stroke="#385D8A" StrokeThickness="2" StrokeLineJoin="Round" Fill="#4F81BD">
    <Path.Data>
      <GeometryGroup>
        <PathGeometry>
          <PathGeometry.Figures>
            <PathFigure StartPoint="0,0" IsClosed="True">
              <PathFigure.Segments>
                <LineSegment Point="102,0" />
                <LineSegment Point="102,102" />
                <LineSegment Point="0,102" />
              </PathFigure.Segments>
            </PathFigure>
          </PathGeometry.Figures>
        </PathGeometry>
        <PathGeometry>
          <PathGeometry.Figures>
            <PathFigure IsFilled="False" StartPoint="46.15,49.01">
              <PathFigure.Segments>
                <LineSegment Point="-73.36,130.99" />
                <LineSegment Point="-96.42,-96.12" />
                <LineSegment Point="109.35,355.18" />
              </PathFigure.Segments>
            </PathFigure>
          </PathGeometry.Figures>
        </PathGeometry>
      </GeometryGroup>
    </Path.Data>
  </Path>
</Canvas>

1 Ответ

2 голосов
/ 18 февраля 2011

Мини-язык путей поддерживает только контуры, поэтому штрихи должны быть преобразованы в заливки. Это легко сделать самостоятельно, если вы хотите, чтобы линии были шириной в один пиксель, и вы не слишком суетливы по поводу уменьшения или конечных пробок. Просто используйте узкие прямоугольники. Истинный математический «рост» бесконечно узкого штриха с использованием минимального количества точек и обработкой пересечений довольно сложен. Однако вы можете использовать механизм рендеринга WPF, чтобы сделать это за вас, поскольку, очевидно, он уже может это сделать.

...