我有一个动态生成的路径,其数据由PathGeometry
组成的PathFigure
组成。此PathFigure
包含许多线段。所以整个路径是连续的,由直线组成。将这条路径分成许多不同的小路径的好方法是什么?如果你很好奇,我需要这样做的原因是为了实现“消失的路径”效果,并且似乎没有其他方法可以做到这一点。
所以我想采取一条路径,并将其拆分为许多不同的小路径,然后我将第一个小路径的不透明度设置为0,将最后一个小路径设置为1,并插入其间的所有内容。此外,我可以使用它来使路径的尾部变小,并插入到路径的头部,这是很大的。有很多用途 - 我需要一种方法来为我的应用程序执行此操作。
答案 0 :(得分:2)
请参阅Charles Petzold的GradientPath,它的实现类似于您的描述,如果您想添加对改变路径宽度的支持,则应该很容易调整。
答案 1 :(得分:0)
听起来您可以简单地使用线性渐变画笔来表示路径的笔触颜色,以实现路径渐变的相同效果,而不是分割路径。例如,尝试在路径上设置下方的画笔。
在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是由PathFigures组成的PathGeometry,因此您只需以编程方式访问这些段并创建更多Path对象。对于布局,因为每个Path本身都是一个新的UIElement,其父级必须对其进行测量和排列,所以需要将所有新路径放入布局面板中,以使它们保持相同的相对位置。
我认为有几种方法可以解决这个问题,但是将它们重新组合在一起的一种方法是简单地将它们放在画布上,并使用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中这样做。如果不是,请告诉我,我可以详细说明。