我看到以下代码中最奇怪的错误。
我有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);
然后我画了它:
using (DrawingContext drawingContext = RenderOpen())
drawingContext.DrawGeometry(null, _pen, _pathGeometry);
我应该看到的内容:
WPF应绘制一条从0到-10并返回0的垂直线。最后一部分(回到0)无法看到,因为它是在同一个x像素上绘制的。但最后一部分会导致以下结果:
我看到的内容:
WPF绘制一条从0到-15的行。对我来说完全是无稽之谈。每当我在另一条垂直线的顶部绘制一条垂直线时,就会发生这种5像素的差异,如上例所示。
请有人告诉我,我犯了一个错误,这不是WPF错误。
答案 0 :(得分:5)
我认为这个问题与WPF如何在你的Path中呈现“角落”有关。随着两个线段之间的角度变得更加尖锐,角落渲染变得更加明显。
在你的情况下,你有一个零度角(折叠自身的线段),这是最有问题的情况。
并非所有都丢失了 - 有几种可能的解决方案:
有关StrokeLineJoin的更多信息,请参阅here。有关WPF如何呈现Mitered角落的有趣帖子,请参阅here。
答案 1 :(得分:0)
如果它类似于GraphicsPath
,您还需要设置终点。
答案 2 :(得分:0)
好的,我自己找到了解决这个问题的方法。 似乎确实是WPF错误。
您需要将LineSegment
添加到个人PathFigure
中才能看到这种奇怪的行为:
PathFigure pathFigure1 = new PathFigure();
pathFigure1.StartPoint = new Point(4, 0);
LineSegment lineSegment1 = new LineSegment(new Point(4, -10), true);
pathFigure1.Segments.Add(lineSegment1);
PathFigure pathFigure2 = new PathFigure();
pathFigure2.StartPoint = new Point(4, -10);
LineSegment lineSegment2 = new LineSegment(new Point(4, 0), true);
pathFigure2.Segments.Add(lineSegment2);
pathGeometry.Figures.Add(pathFigure1);
pathGeometry.Figures.Add(pathFigure2);
如果有人能解释为什么我会看到这个错误,如果我不这样做,或者有人可以确认这是一个错误,我仍然会感激不尽。