protected override void OnRender(DrawingContext dc) { Point pos, tangent; double angleInRadians; double angleInDegrees; TransformGroup tg; Pen pen = new Pen(Stroke, StrokeThickness); dc.DrawGeometry(null, pen, LinePath); if (BeginCap != null) { LinePath.GetPointAtFractionLength(0.01d, out pos, out tangent); angleInRadians = Math.Atan2(tangent.Y, tangent.X) + Math.PI; angleInDegrees = angleInRadians * 180 / Math.PI + 180; tg = new TransformGroup(); tg.Children.Add(new RotateTransform(angleInDegrees)); LinePath.GetPointAtFractionLength(0.0d, out pos, out tangent); tg.Children.Add(new TranslateTransform(pos.X, pos.Y)); dc.PushTransform(tg); dc.DrawGeometry(Brushes.Red, pen, BeginCap); dc.Pop(); } if (EndCap != null) { LinePath.GetPointAtFractionLength(0.99, out pos, out tangent); angleInRadians = Math.Atan2(tangent.Y, tangent.X) + Math.PI; angleInDegrees = angleInRadians * 180 / Math.PI; tg = new TransformGroup(); tg.Children.Add(new RotateTransform(angleInDegrees)); LinePath.GetPointAtFractionLength(1, out pos, out tangent); tg.Children.Add(new TranslateTransform(pos.X, pos.Y)); dc.PushTransform(tg); dc.DrawGeometry(Brushes.Red, pen, EndCap); } }