2009-09-11 22 views
14

Eğimden bağımsız olarak yumuşak kenarlı bir çizgi çizmeye çalışıyorum. çizgi yatay olduğundanWPF'de (muhtemelen bir LinearGradientBrush kullanılarak) "yumuşak" bir çizgi nasıl çizebilirim?

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

Bu, bana mantıklı ve doğrusal gradyan kenarları şeffaf ve hattın orta olmak üzere dikey: Burada

var bugüne kadar kod koyu yeşil.

sonuç sevindiricidir:
http://img15.imageshack.us/img15/4108/horizontalsoftline.png
Renk geçişi görebilirsiniz Zoomed: çizgi, gradyan çizginin sınırlayıcı dikdörtgenin dayalı olarak hesaplanır artık yatay olduğunda Ancak
http://img225.imageshack.us/img225/5027/horizontalsoftlinezoomeb.png

satırın kendisinin geometrisinden ziyade. Sonuç yerine hattına dik olarak degrade, dikey gölgeli eğimli bir çizgi olup:
http://img183.imageshack.us/img183/7250/slantedsoftline.png

kimse WPF yumuşak kenarları nasıl işleyeceğini bilen var mı? Google veya MSDN'de hiçbir şey bulamıyorum ve bunu bir şekilde yapmanın bir yolu olduğunu biliyorum ...

+0

İyi soru. Böyle çizgilerle sınırların nasıl çizileceğini bulmaya çalışıyorum. Yanıtların ilişkili olacağını hissediyorum. –

cevap

5

Bu, sizin senaryounuza uygun olup olmadığını bilmiyorum, ancak yatay çizgiyi basitçe çevirebilirsiniz. LayoutTransform kullanarak ve degradeler iyi olacak.

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

+0

Hmm, bu kabul edilebilir bir çözümdür ... Yapmamayı tercih ederim, çünkü bu çözüm matematiksel koordinat sistemimi bertaraf etme potansiyeline sahip - ama sonuç iyi ise sonunda ödeme yapmak için oldukça küçük bir fiyat gibi görünüyor . LayoutTransform yerine RenderTransform kullanıyorum eklemeliyim. LayoutTransform'un aynı sonuçları üreteceğini varsayardım, ama test etmedim. – Giffyguy

2

deneyin için renk tonlarını kalınlığı artan ve azalan ile yolların bir çok yığın bir hattı yerine

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

TÖMER'den

0

bir şekil kullanımı , diğerinin üzerine çizerek.

Tüm geometrilerin aynı Geometriye sahip olması için, bunlardan birinin Data özelliğine Öğe Bağlama özelliğini kullanmalısınız.

Muhtemelen bazı kod arkası, gerekirse, yolları ve renk geçişlerini dinamik olarak oluşturmak için yararlı olabilir.

İlgili konular