2009-03-10 39 views

cevap

29

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" /> 
+0

+1, bu düşündüğüm şey ama doğru çalışması için işe yaramadı, güzel! –

+0

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

+0

Yukarıdaki WavyBrush, test ettiğim bir dalga değil. – Elisabeth

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ı.

+0

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 –

1

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> 
4

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); 
İlgili konular