Я хочу создать wavy underlines с помощью TextDecoration (в элементе управления, подобном RichTextBox).Волнистые подчеркивания как TextDecoration: что я делаю неправильно?
Я сделал следующее вещь:
private static Pen CreateErrorPen() {
var geometry = new StreamGeometry();
using (var context = geometry.Open()) {
context.BeginFigure(new Point(0.0, 0.0), false, false);
context.PolyLineTo(new[] {
new Point(0.75, 0.75),
new Point(1.5, 0.0),
new Point(2.25, 0.75),
new Point(3.0, 0.0)
}, true, true);
}
var brushPattern = new GeometryDrawing {
Pen = new Pen(Brushes.Red, 0.2),
Geometry = geometry
};
var brush = new DrawingBrush(brushPattern) {
TileMode = TileMode.Tile,
Viewport = new Rect(0.0, 1.5, 9.0, 3.0),
ViewportUnits = BrushMappingMode.Absolute
};
var pen = new Pen(brush, 3.0);
pen.Freeze();
return pen;
}
Это почти работает, но в зависимости от подчеркнутой позиции слова в тексте, Подчеркивает часто появляются в виде рисунка из нескольких наложенных друг на друга волн. Также подчеркивания немного размыты, даже если они верны (проблема wpf с рисунком между пикселями, я полагаю).
Мое решение было своего рода пробной ошибкой, поэтому я, возможно, ошибся, особенно с Viewport/ViewportUnits.
Что я делаю неправильно и есть способ получить четкие подчеркивания?
Заранее спасибо.
Я попытался установить оба, но Я по-прежнему получаю очень странные эффекты (волны не пересекаются, но в некоторых случаях вертикально разрезаны пополам - кажется, что шаблон не фиксирован относительно конечной позиции линии в документе). –
О, я понимаю, что вы сейчас имеете в виду. Это очень заметно при изменении размера текста. Я думаю, что мы действительно хотим, чтобы единицы Viewport были абсолютными по горизонтали, но относительными по вертикали. Я еще немного потрудился с этим. –