如何在C#/ WPF中的一行上有箭头符号?

我是C#/ WPF应用程序中的图形新手。 我有一个WPF应用程序,并使用Canvas在鼠标的帮助下在运行时绘制各种对象。我在绘制带箭头的线时面临问题(如下所示): (A)------------> ----(B) 在此箭头中,标志应位于线的第3部分(并且应始终指向移动的鼠标)。例如,如果我在点“A”处单击鼠标并向点“B”移动,则箭头符号应指向“B”,如上所示。 任何帮助将受到高度赞赏。 最好的祝福, 月亮     
已邀请:
感谢您的帮助和支持。我已经解决了我的问题如下::
private static Shape DrawLinkArrow(Point p1, Point p2)
{
    GeometryGroup lineGroup = new GeometryGroup();
    double theta = Math.Atan2((p2.Y - p1.Y), (p2.X - p1.X)) * 180 / Math.PI;

    PathGeometry pathGeometry = new PathGeometry();
    PathFigure pathFigure = new PathFigure();
    Point p = new Point(p1.X + ((p2.X - p1.X) / 1.35), p1.Y + ((p2.Y - p1.Y) / 1.35));
    pathFigure.StartPoint = p;

    Point lpoint = new Point(p.X + 6, p.Y + 15);
    Point rpoint = new Point(p.X - 6, p.Y + 15);
    LineSegment seg1 = new LineSegment();
    seg1.Point = lpoint;
    pathFigure.Segments.Add(seg1);

    LineSegment seg2 = new LineSegment();
    seg2.Point = rpoint;
    pathFigure.Segments.Add(seg2);

    LineSegment seg3 = new LineSegment();
    seg3.Point = p;
    pathFigure.Segments.Add(seg3);

    pathGeometry.Figures.Add(pathFigure);
    RotateTransform transform = new RotateTransform();
    transform.Angle = theta + 90;
    transform.CenterX = p.X;
    transform.CenterY = p.Y;
    pathGeometry.Transform = transform;
    lineGroup.Children.Add(pathGeometry);

    LineGeometry connectorGeometry = new LineGeometry();
    connectorGeometry.StartPoint = p1;
    connectorGeometry.EndPoint = p2;
    lineGroup.Children.Add(connectorGeometry);
    System.Windows.Shapes.Path path = new System.Windows.Shapes.Path();
    path.Data = lineGroup;
    path.StrokeThickness = 2;
    path.Stroke = path.Fill = Brushes.Black;

    return path;
}
谢谢, 月亮     
我刚刚用Expression Blend 4的箭头形状绘制了两个,它创建了这个:
     <Window
        ...
        xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" ... /> 

    <ed:BlockArrow Height="8" Margin="119,181,169,0" Orientation="Left" Stroke="Black" VerticalAlignment="Top" />
    <ed:LineArrow Fill="#FFF4F4F5" Height="1" Margin="119,117,169,0" Stroke="#FF027602" VerticalAlignment="Top" BendAmount="0" StartCorner="TopRight" StrokeThickness="2"/>
    
您可以使用
Canvas
控件来表示箭头,
<Canvas Margin="5" Width="60" Height="20">            
    <Line X1="10" Y1="10" X2="50" Y2="10" Stroke="Black" 
                  StrokeThickness="2" StrokeDashCap="Round" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/>
    <Line X1="35" Y1="10" X2="30" Y2="5" Stroke="Black" 
                  StrokeThickness="2" StrokeDashCap="Round" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/>
    <Line X1="35" Y1="10" X2="30" Y2="15" Stroke="Black" 
                  StrokeThickness="2" StrokeDashCap="Round" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/>
</Canvas>
如果要在运行时创建它,可以在类后面的代码中创建
Canvas
。 请注意,上面的示例,实际上并不遵循箭头符号应该在行规则的第3部分,您可能必须相应地修改该行的坐标。     
我建议你使用Path geometry。看一下这个样本(也许你已经有了),但它有与你的类似的要求,http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part4.aspx     
我会通过使用你想要的箭头图像来做到这一点。制作一个快速的photoshop .jpg或.png用于默认箭头图像,然后根据A点和B点之间的距离进行缩放。旋转稍微复杂一点,但是如果你已经采用了基本的三角形过程,它应该仍然很容易。 另一种方法是绘制像素。这通常要困难得多,在这种情况下确定箭头方向的代码更加困难。再次,我建议上面的方法。     
您可以使用Line类绘制组成箭头的线段。例如,您可以从A到B绘制一条长线和两条较小的有角度的线来绘制指向B的头部。 找到合适的线位置所涉及的数学应该不会太困难。对于头部,只需确定两个部分的尺寸,并将它们拉近B角度约30度左右。如果您有任何问题,请告诉我。 图像技术的问题在于头部会随着箭头的长度而伸展。你必须在头部和其余部分之间划分位图。     

要回复问题请先登录注册