SVG -> WPF线性渐变

3

有没有人知道WPF中的LinearGradientBrush是否有SVG的"gradientUnits=userSpaceOnUse"属性的等效属性? 我找不到这个选项。

如果没有,是否有人知道如何在(C#或VB.NET)中计算它? 例如,如果我在一个100x100的矩形上有0,0的StartPoint和1,1的EndPoint,则角度为45度。 但是,当我更改矩形的宽度或高度时,例如Width = 150时,轴不再是45度。 我该如何计算以保持非正方形矩形中角度为45度,使其从底部左侧延伸到顶部右侧的中间渐变停止点。


当您说要改变宽度或高度时,您是否正在转换矩形?如果是的话,您是使用Transform还是RelativeTransform呢? - räph
抱歉,我觉得我没有表达清楚。我不是事后更改W或H - 我只是以100x100的正方形作为所需结果(45度角)的示例,例如120x220的不同大小的矩形。所需的结果是,如果有三条线渐变,则中间一条将从矩形的左下角到右上角直接沿着该轴运行。 - Todd Main
2个回答

3

将画笔的 MappingMode 属性设置为 BrushMappingMode.Absolute。


谢谢。我看了Absolute,但无法弄清如何计算起始/结束点的位置。 - Todd Main

1

现在在新的Silverlight 4中,这个功能非常好用 - 在RotateTransform中将角度设置为45度会对边界框而不是形状进行旋转。像这样:

  <Rectangle Width="70" Height="50">
    <Rectangle.Fill>
        <LinearGradientBrush  EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFF70202" Offset="0"/>
            <GradientStop Color="#FFF7F206" Offset="1"/>
            <GradientStop Color="Black" Offset="0.49"/>
            <GradientStop Color="Black" Offset="0.51"/>
            <GradientStop Color="White" Offset="0.5"/>
            <LinearGradientBrush.RelativeTransform>
            <RotateTransform CenterX="0.5" CenterY="0.5" Angle="45"></RotateTransform>
            </LinearGradientBrush.RelativeTransform>
        </LinearGradientBrush>
    </Rectangle.Fill>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接