2009-08-30 3 views
3

Кто-нибудь знает, существует ли атрибут равноценности SVG «gradientUnits = userSpaceOnUse» в WPF для LinearGradientBrush? Кажется, я не могу найти это.SVG -> линейный градиент WPF

Если нет, знает ли кто-нибудь о том, как его вычислить (C# или VB.NET)? Например, если у меня есть StartPoint 0,0 и EndPoint 1,1 на прямоугольнике, который равен 100x100, угол составляет 45 градусов. Однако, когда я изменяю ширину или высоту прямоугольника, например Width = 150, ось больше не равна 45 градусам. Как я мог вычислить, чтобы угол в 45 градусов находился в прямоугольнике, который не является квадратом, так что он проходит от нижнего левого угла в верхний правый угол для среднего градиента.

+0

Когда вы говорите об изменении ширины или высоты, вы трансформируете прямоугольник? Если да, используете ли вы Transform или RelativeTransform? –

+0

Извините, я не думаю, что я был чист. Я не изменяю W или H после факта - я использовал квадрат 100x100 в качестве примера желаемого результата (угол 45 градусов) для прямоугольников разного размера, например 120x220. Желаемый результат состоит в том, что если есть три линейных градиента, средний будет работать от нижнего левого от правого до верхнего правого, прямо на этой оси. –

ответ

3

Это работает как шарм сейчас в новом Silverlight 4 - установка угла до 45 градусов в RotateTransform делает это за ограничительную рамку вместо формы. Например:

<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

спасибо. Я посмотрел на Absolute, но не мог понять, как вычислить местоположения Start/End Point. –