물결은 흐름 문서에서 밑줄을 긋습니다
-
08-07-2019 - |
문제
WPF에서는 물결 모양의 밑줄 (단어의 철자 오류)을 추가하는 쉬운 방법이 있습니까? FlowDocument
집단? 거기 있습니다 Underline
수업이지만 스타일을 지정할 방법이없는 것 같습니다.
해결책
Robert MacNe의 솔루션을 변경하여 물결 효과를 만들 수 있습니다.
Grid.Resources 섹션에 비주얼 브러시를 추가하십시오.
<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>
펜을 다음으로 변경합니다.
<Pen Brush="{StaticResource WavyBrush}" Thickness="6" />
다른 팁
빨간색 밑줄은 충분히 간단합니다.
<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>
ㅏ 떨리는 빨간색 밑줄은 조금 더 관여하지만 물결 모양의 빨간색으로 비주얼 브러쉬를 만들 수 있다고 생각합니다. 편집 : 참조 Bstoney이것에 대한 게시물.
다음은 코드에서 구현 된 @bstoney의 솔루션입니다.
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);
나는 이것이 오래된 질문이라는 것을 알고 있지만이 브러시를 선호합니다. 약간 각도이지만 매우 깨끗합니다.
<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>
제휴하지 않습니다 StackOverflow