C# 在WPF中一行的开始和结束处放置一个形状
我正在应用程序中使用System.Windows.Shapes.Line在画布上绘制一条线。我想在线条的起点和终点放置一个形状,例如十字('x')?有没有办法通过设置属性来实现这一点。我可以根据坐标在画布上添加一个“x”,但我希望我们可以直接使用一些线属性来实现这一点。 目前我能画出这个=--------------- 使用下面的代码段中的属性:-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
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个枚举具有基于笔划厚度的形状。我无法确定在线条的末端放置自定义形状(如所附图片所示)。不幸的是,在这方面找不到类似的问题。当然,正如文档中所解释的,它们“有用途”。尝试增加厚度并去掉破折号阵列,您将清楚地看到平头和圆头之间的区别。