Вот прямой перевод с использованием PathGeometry:
<PathGeometry FillRule="EvenOdd">
<PathFigure StartPoint="10,100" IsFilled="true" IsClosed="true">
<LineSegment Point="100,100" IsStroked="false" IsSmoothJoin="false" />
<LineSegment Point="100,50" IsStroked="true" IsSmoothJoin="false" />
</PathFigure>
</PathGeometry>
Это можно упростить, пропустив значения по умолчанию для FillRule, IsFilled, IsStroked и IsSmoothJoin, что приведет к следующему:
<PathGeometry>
<PathFigure StartPoint="10,100" IsClosed="true">
<LineSegment Point="100,100" IsStroked="false" />
<LineSegment Point="100,50" />
</PathFigure>
</PathGeometry>
Это должно быть сделано с помощью PathGeometry, а не с мини-языком геометрии (например, «M10,100 L100,100 100,50»), потому что мини-язык не позволяет установить IsStroked = false.
Поскольку вам нужна StreamGeometry, я рекомендую использовать метод GeometryExtensions.DrawGeometry
в этом ответе для преобразования PathGeometry, определенного в XAML, в StreamGeometry.
Я бы хотел сделать это, используя расширение разметки:
<local:ConvertToStreamGeometry>
<PathGeometry>
<PathFigure StartPoint="10,100" IsClosed="true">
<LineSegment Point="100,100" IsStroked="false" />
<LineSegment Point="100,50" />
</PathFigure>
</PathGeometry>
</local:ConvertToStreamGeometry>
Реализация расширения разметки тривиальна:
[ContentProperty("Geometry")]
public class ConvertToStreamGeometry : MarkupExtension
{
public Geometry Geometry { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var result = new StreamGeometry();
using(var ctx = result.Open())
ctx.DrawGeometry(Geometry);
return result;
}
}
Обратите внимание, что это вызывает метод расширения GeometryExtensions.DrawGeometry из кода в моем предыдущем ответе .