/// <inheritdoc/> protected override Size MeasureOverride(Size availableSize) { typeface = this.CreateTypeface(); emSize = (double)GetValue(TextBlock.FontSizeProperty); using (var text = TextFormatterFactory.CreateTextLine( this, new string('9', maxLineNumberLength), typeface, emSize, (Brush)GetValue(Control.ForegroundProperty) )) { return(new Size(text.Width, 0)); } }
/// <inheritdoc/> protected override void OnRender(DrawingContext drawingContext) { TextView textView = this.TextView; Size renderSize = this.RenderSize; double w = renderSize.Width / maxLineNumberLength; if (textView != null && textView.VisualLinesValid) { var foreground = (Brush)GetValue(Control.ForegroundProperty); foreach (VisualLine line in textView.VisualLines) { int lineNumber = line.FirstDocumentLine.LineNumber; using (var text = TextFormatterFactory.CreateTextLine( this, lineNumber.ToString(CultureInfo.CurrentCulture), typeface, emSize, foreground )) { double y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop); text.Draw(drawingContext, new Point(renderSize.Width - text.Width - w, y - textView.VerticalOffset), InvertAxes.None); } } } }