2017-06-05 26 views
1

我在应用程序中使用System.Windows.Shapes.Line在画布上绘制一条线。我想放一个形状,例如在线的开始和结束处有一个十字('x')?有没有办法通过设置一个属性来做到这一点。我可以根据坐标在画布上添加'x',但我希望能够直接使用某些Line属性来完成此操作。 目前我能够使用属性来绘制此= --------------- dashed line为下段: -在WPF中创建行和行尾的形状

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 dashed line with 'x' marks

如何在行尾制作自定义形状?

+2

还有就是StrokeStartLineCap和StrokeEndLineCap属性:https://msdn.microsoft.com/en-us/library/ms754071(v=vs.110).aspx – mm8

+0

@ mm8我已经在使用StrokeStartLineCap和StrokeEndLineCap(正如你在编辑的问题中看到的那样)。 –

+0

“PenLineCap的4个枚举似乎没有达到目的”是什么意思?检查文档中的示例。 – mm8

回答

1

评论建议,并鼓励我写我自己的形状放在线帽。这可能不是最好的方法,但对我很好。该类将一个对象作为一个Grid返回,我可以在绘制线条时将其添加到画布中。这就是我已经做到了: -

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; 
     } 
    }