0

I am currently working on an arrow, containing a text (here 'Test'), that shows an offset. My code is:

Width = 200;
Length = 1000;
double arrowHeadWidth = Width;
double arrowHeadLength = Width / 2;
double arrowWidth = Width - arrowHeadWidth / 2;
double arrowLength = Length;
double centerY = Width / 2.0;

var figure = new PathFigure
{
   IsClosed = true,
   StartPoint = new Point(0, centerY - arrowWidth / 2.0)
};

figure.Segments.Add(new LineSegment(new Point(arrowLength - arrowHeadLength, centerY - arrowWidth / 2.0), true));
figure.Segments.Add(new LineSegment(new Point(arrowLength - arrowHeadLength, centerY - arrowHeadWidth / 2.0), true));
figure.Segments.Add(new LineSegment(new Point(arrowLength, centerY), true));
figure.Segments.Add(new LineSegment(new Point(arrowLength - arrowHeadLength, centerY + arrowHeadWidth / 2.0), true));
figure.Segments.Add(new LineSegment(new Point(arrowLength - arrowHeadLength, centerY + arrowWidth / 2.0), true));
figure.Segments.Add(new LineSegment(new Point(0, centerY + arrowWidth / 2.0), true));

var geometry = new PathGeometry();
geometry.Figures.Add(figure);

var borderPen = new Pen(Brushes.White, 10)
{
   LineJoin = PenLineJoin.Round
};

var arrowDrawing = new GeometryDrawing(Brushes.Transparent, borderPen, geometry);

FormattedText formattedText = new FormattedText(
  "Test",
  System.Globalization.CultureInfo.CurrentUICulture,
  FlowDirection.LeftToRight,
  new Typeface("Tahoma"),
  12,
  Brushes.Black);

  formattedText.MaxTextWidth = arrowLength - 40;
  formattedText.MaxTextHeight = arrowWidth - 10;
  Geometry textGeometry = formattedText.BuildGeometry(new System.Windows.Point(20, 5));

  GeometryDrawing textDrawing = new GeometryDrawing(Brushes.Red, new Pen(Brushes.Red, 1), textGeometry);

  var drawingGroup = new DrawingGroup();
  drawingGroup.Children.Add(arrowDrawing);
  drawingGroup.Children.Add(textDrawing);

  var brush = new DrawingBrush(drawingGroup);

But I only get the arrow shown. What am I doing wrong? If I comment out the line drawingGroup.Children.Add(arrowDrawing); I get the text displayed.

Any suggestions would help. Thanks in advance,

Benny

Edit: Creation of arrow added

Benny
  • 25
  • 8

0 Answers0