2011-02-04 145 views
1

我有一个动态生成的路径,其数据构成是:一个PathFigure组成PathGeometry的。这PathFigure包含一堆线段。所以整个路径是连续的,由直线组成。将这条路径分成许多不同的小路径的好方法是什么?如果你很好奇,我需要做的原因是,实现了“路渐行渐远”的效果,而且似乎没有成为另一种方式来做到这一点。Progammatically分割路径成多条路径

所以我想要一条路径,并将它分成许多不同的小路径,然后我将第一个小路径的不透明度设置为0,并将最后一个小路径设置为1,并插入其间的所有内容。另外,我可以使用它来使路径的尾部变小,并插入到路径的头部,这很大。有很多用途 - 我需要一种方法来为我的应用程序执行此操作。

回答

2

请参阅GradientPath Charles Petzold它的实现方式类似于您的描述,如果您想添加对改变路径宽度的支持,应该很容易进行调整。

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对象。对于布局,因为每个路径本身是一个新的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对象以及做到这一点,因为它听起来像你可能不要在你的问题中在XAML中做这件事。让我知道如果它不是,我可以详细说明。

+0

我同意克里斯的回答以上。如果可以的话,该博客上的GradientPath绝对是更好的选择。 – timmyl 2011-02-04 03:36:55

+0

感谢所有这些信息。线性渐变画笔不起作用,因为它基于路径的边界框应用渐变,如该渐变路径链接中所示。我会试用GradientPath,看看它是如何工作的。否则,我会更加关注你对路径分割的看法。 – Dalal 2011-02-05 00:05:46