14

无论坡度如何,我都试图画一条边缘柔软的线。

这是我到目前为止的代码:

<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 上找不到任何东西,而且我知道有办法以某种方式做到这一点......

4

4 回答 4

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>

于 2009-09-11T20:17:02.203 回答
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>

托默

于 2011-03-08T09:21:50.120 回答
0

您可以堆叠许多增加厚度和减少颜色色调的路径,将一个绘制在另一个之上。

对于具有相同几何图形的所有路径,您应该使用元素绑定到Data其中一个的属性。

如果需要,很可能一些代码隐藏对动态生成路径和颜色渐变很有用。

于 2014-01-07T12:50:32.540 回答
0

你可以设置MappingMode="Absolute"你的'LinearGradientBrush'。然后您的画笔开始/结束坐标与边界框无关。当然,你必须处理一些三角函数才能得到正确的点......

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

于 2018-09-19T15:05:42.580 回答