In WPF, gibt es eine einfache Möglichkeit, Wellenlinien (wie Rechtschreibfehler in Word) zu FlowDocument
Elemente hinzufügen? Es gibt die Underline
Klasse, aber es scheint keine Möglichkeit zu geben, sie zu stylen.Wellig unterstreicht in einem Flowdocument
Antwort
Sie können den gewellten Effekt mit den folgenden Änderungen an Robert Macne Lösung
hinzufügen visuelle Pinsel zum Grid.Resources Abschnitt erstellen:
<VisualBrush x:Key="WavyBrush" Viewbox="0,0,3,2" ViewboxUnits="Absolute" Viewport="0,0.8,6,4" ViewportUnits="Absolute" TileMode="Tile">
<VisualBrush.Visual>
<Path Data="M 0,1 C 1,0 2,2 3,1" Stroke="Red" StrokeThickness="0.2" StrokeEndLineCap="Square" StrokeStartLineCap="Square" />
</VisualBrush.Visual>
</VisualBrush>
Und den Stift ändern:
<Pen Brush="{StaticResource WavyBrush}" Thickness="6" />
rot unterstrichen ist einfach genug:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid.Resources>
<FlowDocument x:Key="doc">
<Paragraph>
<Run Text="This text is underlined in red.">
<Run.TextDecorations>
<TextDecoration Location="Underline">
<TextDecoration.Pen>
<Pen Brush="Red" Thickness="1" DashStyle="{x:Static DashStyles.Dot}"/>
</TextDecoration.Pen>
</TextDecoration>
</Run.TextDecorations>
</Run>
</Paragraph>
</FlowDocument>
</Grid.Resources>
<FlowDocumentReader Document="{StaticResource doc}"/>
</Grid>
A wellig rot unterstrichen wäre ein bisschen mehr beteiligt sein, aber ich glaube, Sie in eine VisualBrush mit einem gewellten roten Dinge schaffen könnten, und festgelegt, dass als der Pinsel des Stiftes, den Sie für die Unterstreichung von TextDecoration angeben. Edit: siehe bstoney ‚s Beitrag für diese.
hallo Robert, pls sehen meine WPF Frage, ist es möglich oder nicht http://stackoverflow.com/questions/17541780/how-to-set-inline-images-vertically-center-in- richtextbox –
ich weiß, dass dies eine alte Frage, aber ich ziehe diese Bürste. Es ist ein wenig kantig, aber sehr sauber.
<VisualBrush x:Key="WavyBrush">
<VisualBrush.Visual>
<Path Data="M 0,2 L 2,0 4,2 6,0 8,2 10,0 12,2" Stroke="Red"/>
</VisualBrush.Visual>
</VisualBrush>
Hier ist @ bstoney Lösung in Code implementiert.
Pen path_pen = new Pen(new SolidColorBrush(Colors.Red), 0.2);
path_pen.EndLineCap = PenLineCap.Square;
path_pen.StartLineCap = PenLineCap.Square;
Point path_start = new Point(0, 1);
BezierSegment path_segment = new BezierSegment(new Point(1, 0), new Point(2, 2), new Point(3, 1), true);
PathFigure path_figure = new PathFigure(path_start, new PathSegment[] { path_segment }, false);
PathGeometry path_geometry = new PathGeometry(new PathFigure[] { path_figure });
DrawingBrush squiggly_brush = new DrawingBrush();
squiggly_brush.Viewport = new Rect(0, 0, 6, 4);
squiggly_brush.ViewportUnits = BrushMappingMode.Absolute;
squiggly_brush.TileMode = TileMode.Tile;
squiggly_brush.Drawing = new GeometryDrawing(null, path_pen, path_geometry);
TextDecoration squiggly = new TextDecoration();
squiggly.Pen = new Pen(squiggly_brush, 6);
text_box.TextDecorations.Add(squiggly);
+1, das ist genau das, woran ich dachte, aber es konnte nicht richtig funktionieren, schön! –
Ich fand einen kubischen Bezier Pfad zu skalieren schön ziemlich schwierig. Zwei diagonale Linien funktionieren ebenfalls, sehen aber nicht so gut aus. – bstoney
Das WavyBrush oben ist keine Welle, die ich getestet habe. – Elisabeth