WPF'de, FlowDocument
öğelerine dalgalı alt çizgiler (Word'de yazım hataları gibi) eklemek için kolay bir yol var mı? Underline
sınıfı var, ancak stil oluşturmanın bir yolu yok gibi görünüyor.FlowDocument içinde dalgalı alt çizgiler
cevap
Sen
Grid.Resources bölümüne görsel fırça ekle Robert Macne çözümüyle aşağıdaki değişiklikleri kullanarak dalgalı bir etki yaratabilir:
<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>
Ve kalem değiştirin:
<Pen Brush="{StaticResource WavyBrush}" Thickness="6" />
kırmızı altı çizili yeterince basittir:
<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 dalgalı kırmızı alt çizgi biraz daha fazla dahil olur, ama onun içinde dalgalı kırmızı şeyle VisualBrush'taki yaratabilecek düşünüyorum ve bu set Alt çizgi TextDecoration için belirttiğiniz Kalemin Fırçası olarak. Düzenleme: Bunun için bkz. bstoney adlı kullanıcının mesajı.
Robert merhaba, lütfen benim WPF Soru, bkz onun mümkün ya da değil http://stackoverflow.com/questions/17541780/how-to-set-inline-images-vertically-center-in- richtextbox –
Bunun eski bir soru olduğunu biliyorum ama bu fırçayı tercih ediyorum. Biraz açısal ama çok temiz. İşte
<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>
kodda uygulandığı @ bstoney en çözümdür.
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, bu düşündüğüm şey ama doğru çalışması için işe yaramadı, güzel! –
Güzelce oldukça zor ölçeklemek için kübik bir bezier yolu buldum. İki diyagonal çizgi de işe yarıyor ama iyi görünmüyordu. – bstoney
Yukarıdaki WavyBrush, test ettiğim bir dalga değil. – Elisabeth