使用xaml在Quadratic Bezier Segment上绘制箭头结束

时间:2012-08-31 15:07:51

标签: wpf xaml

QuadraticBezierSegment结束时绘制箭头的最简单方法是什么?棘手的部分是获得正确的旋转以加工输入的线段。

有关如何解决此问题的任何想法?我应该延长PathSegment吗?

Bezier segment with an arrow at the end

我有这个用于画一个简单的贝塞尔线。

<Path Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigureCollection>
          <PathFigure StartPoint="100,430">
            <PathFigure.Segments>
              <PathSegmentCollection>
                <QuadraticBezierSegment Point1="150,250" Point2="250,300" />
              </PathSegmentCollection>
            </PathFigure.Segments>
          </PathFigure>
        </PathFigureCollection>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

1 个答案:

答案 0 :(得分:9)

您可以定义箭头的几何形状....但是要在贝塞尔曲线的末端正确定位它需要反复试验。

相反,您可以使用此控件并使用几何体定义您想要的端盖,并将其正确放置在“线”的末尾。

  • http://blogs.msdn.com/b/mrochon/archive/2011/01/10/custom-line-caps-in-wpf.aspx

    <loc:CappedLine Stroke="Red" StrokeThickness="1" Canvas.Left="40" Canvas.Top="200" RenderTransformOrigin="0.5,0.5" Height="107" Width="195">
        <loc:CappedLine.EndCap>
            <GeometryGroup>
                <LineGeometry StartPoint="0,0" EndPoint="10,10"/>
                <LineGeometry StartPoint="0,0" EndPoint="10,-10"/>
            </GeometryGroup>
        </loc:CappedLine.EndCap>
        <loc:CappedLine.LinePath>
            <PathGeometry Figures="M0,0 C1,1 10.5,75.5 48.5,66.5 86.5,57.5 5,3.5000146 105.5,16.500091 157.5,29.500166 164.5,87.500505 164.5,87.500505" />
        </loc:CappedLine.LinePath>
    </loc:CappedLine>
    
    <loc:CappedLine Stroke="Red" StrokeThickness="1" Canvas.Left="180" Canvas.Top="200" RenderTransformOrigin="0.5,0.5" Height="107" Width="195">
        <loc:CappedLine.EndCap>
            <GeometryGroup>
                <LineGeometry StartPoint="0,0" EndPoint="10,10"/>
                <LineGeometry StartPoint="0,0" EndPoint="10,-10"/>
            </GeometryGroup>
        </loc:CappedLine.EndCap>
        <loc:CappedLine.LinePath>
            <PathGeometry Figures="M0,0 C1,1 10.5,75.5 48.5,66.5 86.5,57.5 5,3.5000146 105.5,16.500091" />
        </loc:CappedLine.LinePath>
    </loc:CappedLine>
    

enter image description here