我看到以下代码中最奇怪的错误.
我有一个PathGeometry我添加了一个,PathFigure所以我可以添加LineSegment它.
这就是我做的:
_pathGeometry.Figures.Add(_pathFigure);
_pathFigure.StartPoint = new Point(4, 0);
LineSegment lineSegment1 = new LineSegment(new Point(4, -10), true);
LineSegment lineSegment2 = new LineSegment(new Point(4, 0), true);
_pathFigure.Segments.Add(lineSegment1);
_pathFigure.Segments.Add(lineSegment2);
Run Code Online (Sandbox Code Playgroud)
然后我画它:
using (DrawingContext drawingContext = RenderOpen())
drawingContext.DrawGeometry(null, _pen, _pathGeometry);
Run Code Online (Sandbox Code Playgroud)
我应该看到的:
WPF应绘制一条从0到-10并返回0的垂直线.最后一部分(回到0)无法看到,因为它是在同一个x像素上绘制的.但最后一部分导致以下结果:
我所看到的:
WPF绘制一条从0到-15的行.对我来说完全是无稽之谈.每当我在另一条垂直线的顶部绘制垂直线时,就会发生这种5像素差异,如上例所示.
请有人告诉我,我犯了一个错误,这不是一个WPF错误.
我认为这个问题与WPF如何在你的Path中呈现"角落"有关.随着两个线段之间的角度变得更加尖锐,角落渲染变得更加明显.
在您的情况下,您有一个零度角(折叠自身的线段),这是最有问题的情况.
并非所有都丢失了 - 有几种可能的解决方案:
有关StrokeLineJoin的更多信息,请参见此处.有关WPF如何呈现Mitered角落的有趣帖子,请参阅此处.