WPF:如何将对象/形状放在线路径/笔划的末尾?

时间:2010-03-03 04:34:19

标签: c# wpf object line stroke

我只想问一下我是否可以在特定的线路末端放置一个物体(圆圈)。

与此类似:

--------------------------------------------O 
Start                                      End

现在,我有以下代码来跟踪该行:

<Grid x:Name="LayoutRoot" >
  <Path Stroke="Red"  StrokeThickness="4"  x:Name="path4" Data="{Binding MyProperty1}"  >
    <Path.StrokeDashArray>
      <System:Double>500</System:Double>
      <System:Double>1000</System:Double>
    </Path.StrokeDashArray>
  </Path>
</Grid>

我路径的数据(例如M532,668 L523,695 361,663 101,678 117,638)有所不同。

我的动画看起来像这样......

<Storyboard x:Key="Story1" RepeatBehavior="Forever">
  <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
                                 Storyboard.TargetName="path1"
                                 Storyboard.TargetProperty="(Shape.StrokeDashOffset)">
    <SplineDoubleKeyFrame KeyTime="00:00:00" Value="500"/>
    <SplineDoubleKeyFrame KeyTime="00:00:08" Value="0"/>
  </DoubleAnimationUsingKeyFrames>
</Storyboard>

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

至少有几种方法可以做到这一点;最好的可能取决于圆与线的关系。

如果圆在概念上与线的形状相同,请更改路径以在线的末尾包含椭圆(弧)。这可以通过更改路径数据来完成,方法是在末尾添加一个圆圈,或者将另一个图添加到PathGeometry中。

如果圆在概念上是一个单独的组件,并且您只想将该组件放在该行旁边,则可以使用StackPanel,其Orientation设置为Horizo​​ntal:

<StackPanel Orientation="Horizontal">
  <Path />  <!-- The line -->
  <Ellipse />  <!-- The circle -->
</StackPanel>

(注意:在某些情况下,您可以使用EndLineCap属性执行此操作。但在这种情况下这不起作用,因为看起来您希望圆圈大于笔触粗细。线帽总是相同的厚度为线。)