/// <inheritdoc/> protected override void Render(TextBox control, PaintEventArgs e) { var text = control.Text.Length > 0 ? control.Text : control.Placeholder; // Bail early if we don't need to draw anything if (text.Length == 0 && !control.Selected) { return; } var block = GetTextBlock(control); UpdateScrollBars(control, block); e.Canvas.Save(); e.Canvas.Clip(control.PaddedClientRectangle); if (text.Length > 0) { e.Canvas.DrawTextBlock(block, GetTextOrigin(control), GetTextSelection(control)); } if (control.Selected) { var caret = TextMeasurer.GetCursorLocation(block, GetTextOrigin(control), GetCursorIndex(control), GetCurrentFontSize(control)); e.Canvas.DrawRectangle(caret, Theme.PrimaryTextColor); } e.Canvas.Restore(); }