听起来您可以简单地使用线性渐变画笔作为路径的笔触颜色,而不是拆分路径,以实现与路径淡化相同的效果。例如,尝试在您的路径上设置下面的画笔。
在 Xaml 中:
<Path.Stroke>
<LinearGradientBrush>
<GradientStop Color="#00000000" Offset="0.0"/>
<GradientStop Color="#FF000000" Offset="1.0"/>
</LinearGradientBrush>
</Path.Stroke>
在 C# 中:
var brush = new LinearGradientBrush();
brush.GradientStops.Add(new GradientStop(new Color { A = 0, R = 0, B = 0, G = 0 }, 0.0));
brush.GradientStops.Add(new GradientStop(new Color { A = 255, R = 0, B = 0, G = 0 }, 1.0));
this._path.Stroke = brush;
此外,为了解决最初的问题,无论上述是否是您正在寻找的,您都有几个选项来拆分路径。由于您知道 Data 是由 PathFigure 组成的 PathGeometry,因此您可以简单地以编程方式访问这些段并创建更多 Path 对象。对于布局,由于每个 Path 本身都是一个新的 UIElement,其父级必须对其进行测量和排列,因此您需要将所有新 Path 放入一个布局面板中,以使它们保持相同的相对位置。
我认为有几种方法可以解决这个问题,但将它们完全重新组合在一起的一种方法是简单地将它们放在画布上,用它们的 Canvas.Top 和 Canvas.Left(或 .Right、.Bottom 取决于你如何'正在布置它们)设置为路径中每个段的开始的相对偏移量,并调整这些点,使它们相对于新路径的新左上角。例如,这个
<Path Stroke="Black">
<Path.Data>
<PathGeometry>
<PathFigure>
<LineSegment Point="10,10"/>
<LineSegment Point="20,60"/>
<LineSegment Point="70,60"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
可以变成类似的东西
<Path Stroke="Black">
<Path.Data>
<PathGeometry>
<PathFigure>
<LineSegment Point="10,10"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
<Path Stroke="Black" Canvas.Top="10" Canvas.Left="10">
<Path.Data>
<PathGeometry>
<PathFigure>
<LineSegment Point="10,50"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
<Path Stroke="Black" Canvas.Top="60" Canvas.Left="20">
<Path.Data>
<PathGeometry>
<PathFigure>
<LineSegment Point="50,0"/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
应该清楚如何通过从 C# 给定 PathGeometry 对象构造几个 Path 来执行此操作,因为从您的问题中听起来您可能不会在 XAML 中执行此操作。如果不是,请告诉我,我可以详细说明。