2009-08-30 78 views
3

有谁知道在LinearGradientBrush的WPF中是否存在SVG的“gradientUnits = userSpaceOnUse”的equilant属性?我似乎无法找到这个。SVG - > WPF线性梯度

如果没有,有人知道如何计算(C#或VB.NET)吗?例如,如果在100x100的Rectangle上有StartPoint为0,0和EndPoint为1,1,则角度为45度。但是,当我改变矩形的宽度或高度时,例如Width = 150,轴不再处于45度。我如何计算将角度保持在45度的矩形不是正方形,以便从中间梯度停止的左下角到右上角。

+0

当你说改变宽度或高度时,你在改变矩形吗?如果是,您是使用Transform还是RelativeTransform? –

+0

对不起,我不认为我很清楚。事实之后,我并没有改变W或H--我使用100x100的正方形作为所需结果(45度角)的示例,用于不同大小的矩形,例如120x220。期望的结果是,如果有三个线条渐变,则中间的一个会从该矩形的左下角到右上角,直接在该轴上运行。 –

回答

3

这就像一个魅力现在在新的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> 
2

设置刷MappingMode = BrushMappingMode.Absolute

+0

谢谢。我看过绝对,但无法弄清楚如何计算开始/结束点位置。 –