C# 在WPF中一行的开始和结束处放置一个形状

C# 在WPF中一行的开始和结束处放置一个形状,c#,wpf,canvas,line,stroke,C#,Wpf,Canvas,Line,Stroke,我正在应用程序中使用System.Windows.Shapes.Line在画布上绘制一条线。我想在线条的起点和终点放置一个形状,例如十字('x')?有没有办法通过设置属性来实现这一点。我可以根据坐标在画布上添加一个“x”,但我希望我们可以直接使用一些线属性来实现这一点。 目前我能画出这个=--------------- 使用下面的代码段中的属性:- var DistanceLine = new Line(); DistanceLine.Stroke = new SolidColorBrush(L

我正在应用程序中使用System.Windows.Shapes.Line在画布上绘制一条线。我想在线条的起点和终点放置一个形状,例如十字('x')?有没有办法通过设置属性来实现这一点。我可以根据坐标在画布上添加一个“x”,但我希望我们可以直接使用一些线属性来实现这一点。 目前我能画出这个=--------------- 使用下面的代码段中的属性:-

var DistanceLine = new Line();
DistanceLine.Stroke = new SolidColorBrush(LineColor);
DistanceLine.StrokeDashArray = new DoubleCollection() {0, 4};
DistanceLine.StrokeDashCap = PenLineCap.Round;
DistanceLine.StrokeEndLineCap = PenLineCap.Round;
DistanceLine.StrokeLineJoin = PenLineJoin.Round;
DistanceLine.StrokeStartLineCap = PenLineCap.Round;
DistanceLine.StrokeThickness = 3;
我想要这样的东西=x------------------x


如何在线条的末尾创建自定义形状

这些评论建议并鼓励我写下我自己的形状,放在线条上。这可能不是最好的方法,但对我很有效。该类以网格形式返回一个对象,我可以在画线时将其添加到画布中。我就是这样做的:-

public class CrossHair : Grid
    {
        public string LineName { get; set; }

        /// <summary>
        /// Draws the crosshair at the given point
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        static public CrossHair DrawCrossHair(double x, double y)
        {
            var crosshair = new CrossHair(); // to contain the cross hair
            var line1 = new Line();
            var line2 = new Line();
            var line3 = new Line();
            var line4 = new Line();
            line1.Stroke = line2.Stroke = line3.Stroke = line4.Stroke = new SolidColorBrush(Colors.Yellow);
            line1.StrokeThickness = line2.StrokeThickness = line3.StrokeThickness = line4.StrokeThickness = 2;

            line1.X1 = x - 5;
            line1.Y1 = y;
            line1.X2 = x - 2;
            line1.Y2 = y;

            line2.X1 = x;
            line2.Y1 = y + 5;
            line2.X2 = x;
            line2.Y2 = y + 2;

            line3.X1 = x + 2;
            line3.Y1 = y;
            line3.X2 = x + 5;
            line3.Y2 = y;

            line4.X1 = x;
            line4.Y1 = y - 2;
            line4.X2 = x;
            line4.Y2 = y - 5;

            crosshair.Children.Add(line1);
            crosshair.Children.Add(line2);
            crosshair.Children.Add(line3);
            crosshair.Children.Add(line4);

            return crosshair;
        }
    }
公共类交叉线:网格
{
公共字符串LineName{get;set;}
/// 
///在给定点绘制十字线
/// 
/// 
/// 
/// 
静态公共十字线DrawCrossHair(双x,双y)
{
var crosshair=new crosshair();//包含十字线
var line1=新行();
var line2=新行();
var line3=新行();
var line4=新行();
line1.Stroke=line2.Stroke=line3.Stroke=line4.Stroke=new SolidColorBrush(颜色.黄色);
line1.StrokeThickness=line2.StrokeThickness=line3.StrokeThickness=line4.StrokeThickness=2;
line1.X1=x-5;
第1.Y1行=y;
line1.X2=x-2;
第1.Y2行=y;
line2.X1=x;
第2.Y1行=y+5;
line2.X2=x;
第2.Y2行=y+2;
第3.X1行=x+2;
第3.Y1行=y;
第3.X2行=x+5;
第3.Y2行=y;
line4.X1=x;
第4.Y1行=y-2;
line4.X2=x;
第4.Y2行=y-5;
crosshair.Children.Add(第1行);
crosshair.Children.Add(第2行);
crosshair.Children.Add(第3行);
crosshair.Children.Add(第4行);
返回十字线;
}
}

有StrokeStartLineCap和StrokeEndLineCap属性:@mm8我已经在使用StrokeStartLineCap和StrokeEndLineCap(如您在编辑的问题中所见)。您所说的“PenLineCap的4个枚举似乎不起作用”是什么意思?检查文档中的示例。@mm8我的意思是PenLineCap的4个枚举具有基于笔划厚度的形状。我无法确定在线条的末端放置自定义形状(如所附图片所示)。不幸的是,在这方面找不到类似的问题。当然,正如文档中所解释的,它们“有用途”。尝试增加厚度并去掉破折号阵列,您将清楚地看到平头和圆头之间的区别。