Dot-Net

如何在 WPF 中繪製“軟”線(可能使用 LinearGradientBrush)?

  • April 21, 2019

無論坡度如何,我都試圖畫一條邊緣柔軟的線。

這是我到目前為止的程式碼:

<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/horizo ​​ntalsoftlinezoomeb.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>

引用自:https://stackoverflow.com/questions/1412833