WPF (아마도 선형 그라디언트 브러시를 사용하는)에서 "소프트"라인을 어떻게 그릴 수 있습니까?
문제
경사에 관계없이 부드러운 가장자리가있는 선을 그려 보려고합니다.
지금까지 내가 가지고있는 코드는 다음과 같습니다.
<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://img225.imageshack.us/img225/5027/horizontalsoftlinezoomeb.png
그러나 라인이 더 이상 수평이되지 않으면 그라디언트는 선 자체의 형상이 아닌 라인의 경계 사각형을 기반으로 계산됩니다. 결과는 선에 수직 인 구배 대신 수직으로 음영 처리 된 경사 선입니다.
WPF가 부드러운 가장자리를 어떻게 처리하는지 아는 사람이 있습니까? Google 또는 MSDN에서 아무것도 찾을 수 없으며이 일을 할 수있는 방법이 있다는 것을 알고 있습니다 ...
해결책
글쎄, 나는 그것이 당신의 시나리오에 적용 할 수 있는지 모르겠지만, 당신은 단순히 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>
다른 팁
선 대신 모양을 사용하십시오
<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>
토머
두께가 증가하고 색조가 줄어들면서 다른 경로를 쌓아서 다른 하나를 그려 낼 수 있습니다.
모든 경로가 동일한 형상을 갖기 위해서는 요소 바인딩을 사용해야합니다. Data
그들 중 하나의 재산.
아마도 일부 코드-홀드는 필요한 경우 경로와 색상 구배를 동적으로 생성하는 데 유용 할 것입니다.
당신은 설정할 수 있습니다 MappingMode="Absolute"
당신의 '선형 그라디언트 브러시'에. 그런 다음 브러시 시작/종료 좌표는 경계 상자와 관련이 없습니다. 물론, 당신은 올바른 포인트를 얻으려면 삼각법을 크 런치해야합니다 ...