2017-06-05 2 views
1

J'utilise System.Windows.Shapes.Line dans mon application pour dessiner une ligne sur un canevas. Je veux mettre une forme par ex. une croix ('x') au début et à la fin de la ligne? Est-il possible de le faire en définissant une propriété. Je peux ajouter un 'x' sur la toile en fonction des coordonnées mais j'espérais que nous puissions le faire en utilisant directement une propriété Line. Actuellement, je suis en mesure de tirer cette = --------------- dashed line en utilisant les propriétés comme dans l'extrait sous: -Mettre une forme au début et à la fin d'une ligne dans 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; 

Je veux quelque chose comme ça = x ------------------ x dashed line with 'x' marks

Comment puis-je créer une forme personnalisée à la fin des lignes?

+2

Il y a les propriétés StrokeStartLineCap et StrokeEndLineCap: https://msdn.microsoft.com/en-us/library/ms754071(v=vs.110).aspx – mm8

+0

@ mm8 J'utilise déjà StrokeStartLineCap et StrokeEndLineCap (comme vous pouvez le voir dans la question éditée). –

+0

Que voulez-vous dire par "les 4 énumérations de PenLineCap ne semblent pas servir le but"? Vérifiez l'exemple dans la documentation. – mm8

Répondre

1

Les commentaires proposés et m'a encouragé à écrire ma propre forme à mettre à la ligne de bouchons. Ce n'est peut-être pas la meilleure approche, mais ça marche bien pour moi. La classe renvoie un objet en tant que Grille que je peux ajouter à ma toile lorsque je dessine une ligne. Voilà comment je l'ai fait: -

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