2009-03-10 14 views

Odpowiedz

29

Można stworzyć efekt falowania przy użyciu następujących zmian w roztworze Roberta Macne za

Dodaj pędzla wizualny do sekcji 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> 

i zmienić pióra:

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

+1, to jest właśnie to, o czym myślałem, ale nie mogłem sprawić, żeby działało poprawnie, ładnie! –

+0

Zauważyłem, że uzyskanie sześciennej ścieżki beziera do skalowania ładnie dość trudne. Dwie linie ukośne również działają, ale nie wyglądały tak dobrze. – bstoney

+0

To, że WavyBrush powyżej nie jest falą, którą przetestowałem. – Elisabeth

6

czerwone podkreślenia jest dość prosta:

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

falisty czerwone podkreślenia byłby nieco bardziej zaangażowane, ale myślę, że można utworzyć VisualBrush z falistym czerwonym rzeczy w nim i ustaw, które jako Brush Pen, który określasz dla podkreślenia TextDecoration. Edytuj: patrz wpis bstoney.

+0

Cześć Robert, pls zobaczyć moje pytanie WPF jego możliwości lub nie http://stackoverflow.com/questions/17541780/how-to-set-inline-images-vertically-center-in- richtextbox –

1

Wiem, że to stare pytanie, ale ja wolę ten pędzel. Jest trochę kanciasty, ale bardzo czysty.

<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

Oto rozwiązanie @ bstoney zaimplementowane w kodzie.

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); 
Powiązane problemy