2009-09-11 3 views
14

기울기에 관계없이 부드러운 가장자리가있는 선을 그리려합니다. 선이 수평이기 때문에WPF에서 "소프트"선을 그릴 수있는 방법은 무엇입니까? (아마도 LinearGradientBrush를 사용하고있을 것입니다)?

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

이 나에게 의미가, 선형 그라데이션 가장자리가 투명한과 라인의 중간 인 상태, 수직 : 여기

내가 지금까지 가지고있는 코드입니다 녹색.

결과는 기쁘게 :
http://img15.imageshack.us/img15/4108/horizontalsoftline.png
은 그라디언트 볼 수 있도록 확대 : 선이, 그라데이션이 라인의 경계의 구형을 기준으로 계산됩니다 더 이상 수평 때, 그러나
http://img225.imageshack.us/img225/5027/horizontalsoftlinezoomeb.png

을 , 선 자체의 기하학보다는 오히려. 결과는 대신 선에 수직 인 그라데이션의 수직 음영 처리 된 사선을 수 있습니다 :
http://img183.imageshack.us/img183/7250/slantedsoftline.png

사람은 WPF 부드러운 가장자리를 처리하는 방법을 알고 있나요? Google 또는 MSDN에서 아무 것도 찾을 수 없습니다.이 방법을 알고 있습니다.

+0

좋은 질문입니다. 나는 그런 식으로 경계선을 만드는 법을 알아 내려고 노력해 왔습니다. 나는 대답이 관련 될 것 같은 느낌이 든다. –

답변

5

글쎄, 시나리오에 해당하는지는 모르겠지만 간단히 수평선을 회전 할 수 있습니다. LayoutTransform을 사용하면 그래디언트가 괜찮을 것입니다.

<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

흠, 이것은 받아 들일 수있는 해결 방법입니다 ... 나는이 솔루션이 내 수학 좌표계를 엉망으로 만들 가능성이 있기 때문에 그러지 않는 편이 낫다고 생각합니다. 그러나 결과가 괜찮 으면 끝내야 할 아주 작은 가격 인 것 같습니다. . LayoutTransform 대신 RenderTransform을 사용하고 있다고 덧붙여 야합니다. LayoutTransform이 동일한 결과를 생성한다고 가정하지만 테스트하지 않았습니다. – Giffyguy

2

보십시오 당신은 색상의 색조를 두께를 증가 및 감소와 경로를 많이 쌓을 수 라인 대신

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

토 메르

0

을 모양을 사용하는 , 다른 하나 위에 그리기.

모든 경로가 동일한 지오메트리를 가지려면 요소 중 하나의 요소 인 Data에 요소 바인딩을 사용해야합니다.

대부분의 코드 숨김은 필요할 경우 경로와 색상 그라디언트를 동적으로 생성하는 데 유용 할 수 있습니다.