2009-03-10 22 views

Respuesta

29

Puede crear el efecto ondulado usando los siguientes cambios en la solución de Robert Macne

Añadir un cepillo visual a la sección de 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> 

y cambiar la pluma para:

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

+1, esto es justo lo que estaba pensando pero no pude hacerlo funcionar correctamente, ¡lindo! –

+0

Encontré conseguir un camino de bezier cúbico para escalar muy bien bastante difícil. Dos líneas diagonales también funcionan, pero no se ven tan bien. – bstoney

+0

Ese WavyBrush de arriba no es una ola. Lo probé. – Elisabeth

6

un subrayado rojo es bastante simple:

<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 ondulado subrayado rojo podría ser un poco más complicado, pero creo que se podría crear una VisualBrush con una cosa roja ondulada en ella, y establece que como el Pincel del bolígrafo que especifique para la TextDecoración subrayada. Editar: vea la publicación de bstoney para esto.

+0

Hola Robert, pls ver mi pregunta WPF, su posible o no http://stackoverflow.com/questions/17541780/how-to-set-inline-images-vertically-center-in- richtextbox –

1

Sé que esta es una vieja pregunta, pero prefiero este pincel. Es un poco angular pero muy limpio.

<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

Aquí está la solución de @ bstoney implementada en el código.

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); 
Cuestiones relacionadas