无论斜率如何,我都试图画一条带有柔边的线条。
这是我到目前为止的代码:
<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如何处理软边缘?我在谷歌或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>
答案 1 :(得分: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>
托默
答案 2 :(得分:0)
您可以堆叠许多路径,增加厚度并减少颜色色调,将一个覆盖在另一个上。
对于具有相同几何体的所有路径,您应该使用元素绑定到其中一个的Data
属性。
如果需要,很可能一些代码隐藏对于动态生成路径和颜色渐变很有用。
答案 3 :(得分:0)
您可以在“ LinearGradientBrush”上设置Accuracy with LogisticRegression = 0.9900 (+/- 0.0100)
Accuracy with OptimizedXGB = 0.9100 (+/- 0.0300)
。然后,您的画笔开始/结束坐标就不会相对于边界框。当然,您必须处理一些三角函数以获得正确的点...