Wie kann ich eine „weiche“ Linie in WPF ziehen (vermutlich eine LinearGradientBrush verwenden)?
Frage
Ich versuche, eine Linie mit weichen Kanten zu zeichnen, und zwar unabhängig von der Piste.
Hier ist der Code Ich habe so weit:
<Line HorizontalAlignment="Stretch" VerticalAlignment="Center"
Stretch="Uniform" StrokeThickness="5" X1="0" Y1="0" X2="1" Y2="0">
<Shape.Stroke>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="Transparent" Offset="0" />
<GradientStop Color="Green" Offset="0.5" />
<GradientStop Color="Transparent" Offset="1" />
</LinearGradientBrush>
</Shape.Stroke>
</Line>
Das macht Sinn für mich, da die Linie horizontal ist, und die linearen Gradienten sind vertikal, wobei die Kanten transparent und die Mitte der Linie fest ist grün.
Das Ergebnis ist erfreulich:
Herangezoomt, so können Sie die Steigung sehen:
http://img225.imageshack.us/img225/5027/horizontalsoftlinezoomeb.png
Wenn jedoch die Linie nicht mehr horizontal ist, wird der Gradient berechnet auf der Grundlage der Begrenzungsrechteck Linie, anstatt sich auf die Geometrie der Leitung selbst. Das Ergebnis ist eine schräge Linie, die vertikal schattiert ist, anstelle des Gradienten senkrecht zu der Linie ist:
Wer weiß, wie WPF weiche Kanten behandelt? Ich kann nicht alles auf Google oder MSDN finden, und ich weiß, gibt es eine Möglichkeit, diese somewhow zu tun ...
Lösung
Nun, ich weiß nicht, ob das für Ihr Szenario anwendbar ist, aber man könnte einfach drehen wird die horizontale Linie mit Layout und die Steigung in Ordnung sein.
<Line HorizontalAlignment="Stretch" VerticalAlignment="Center"
Stretch="Uniform" StrokeThickness="5" X1="0" Y1="0" X2="1" Y2="0">
<Shape.Stroke>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="Transparent" Offset="0" />
<GradientStop Color="Green" Offset="0.5" />
<GradientStop Color="Transparent" Offset="1" />
</LinearGradientBrush>
</Shape.Stroke>
<Line.LayoutTransform>
<RotateTransform Angle="40"/>
</Line.LayoutTransform>
Andere Tipps
Versuchen Sie, eine Form statt einer Linie zu verwenden,
<Path Data="M0,0 L25,25 z" Fill="#FFF4F4F5" StrokeThickness="5" Canvas.Left="122" Canvas.Top="58">
<Path.Stroke>
<LinearGradientBrush EndPoint="1.135,0.994" StartPoint="-0.177,-0.077">
<GradientStop Color="Black"/>
<GradientStop Color="#FF68A8FF" Offset="1"/>
</LinearGradientBrush>
</Path.Stroke>
Tomer
Sie können eine Menge von Pfaden Stack mit zunehmender Dicke und Farbtöne abnimmt, einen über den anderen zu ziehen.
Für alle Pfade die gleiche Geometrie haben, sollten Sie verwenden Element Bindung an die Data
Eigenschaft einer von ihnen.
Die meisten wahrscheinlich einige Code-behind wäre sinnvoll, die Pfade und Farbverläufe dynamisch zu generieren, falls erforderlich.
Sie könnten MappingMode="Absolute"
auf Ihrem LinearGradientBrush 'gesetzt. Dann Pinsel Start / Ende-Koordinaten sind nicht relativ zu dem Begrenzungsrahmen. Natürlich würden Sie etwas Trigonometrie crunch müssen die richtigen Punkte zu bekommen ...