WPF (아마도 선형 그라디언트 브러시를 사용하는)에서 "소프트"라인을 어떻게 그릴 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1412833

문제

경사에 관계없이 부드러운 가장자리가있는 선을 그려 보려고합니다.

지금까지 내가 가지고있는 코드는 다음과 같습니다.

<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" 당신의 '선형 그라디언트 브러시'에. 그런 다음 브러시 시작/종료 좌표는 경계 상자와 관련이 없습니다. 물론, 당신은 올바른 포인트를 얻으려면 삼각법을 크 런치해야합니다 ...

https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.gradientbrush.mappingmode?view=netframework-4.7.2#system_windows_media_gradientbrush_mappingmode

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top