2009-03-10 9 views

risposta

29

È possibile creare l'effetto ondulato con le seguenti modifiche alla soluzione di Robert Macne

Aggiungi un pennello visiva alla sezione 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> 

e cambiare la penna per:

<Pen Brush="{StaticResource WavyBrush}" Thickness="6" /> 
+0

+1, questo è proprio quello che stavo pensando, ma non riuscivo a farlo funzionare correttamente, bello! –

+0

Ho trovato un gradino di bezier cubico per scalare bene piuttosto difficile. Anche due linee diagonali funzionano bene, ma non sembravano così buone. – bstoney

+0

Quel WavyBrush sopra non è un'onda l'ho provato. – Elisabeth

6

una sottolineatura rossa è abbastanza semplice:

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

Un ondulato sottolineatura rossa sarebbe un po 'più complesso, ma credo che si potrebbe creare un VisualBrush con una cosa rossa ondulata in essa, e set che come il pennello della penna che si specifica per la sottolineatura di TextDecoration. Modifica: vedi il messaggio bstoney per questo.

+0

hi Robert, pls vedono il mio WPF domanda, la sua possibile o no http://stackoverflow.com/questions/17541780/how-to-set-inline-images-vertically-center-in- richtextbox –

1

So che questa è una domanda vecchia ma preferisco questo pennello. È un po 'angoloso ma molto pulito.

<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

Ecco la soluzione di @ bstoney implementata nel codice.

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); 
Problemi correlati