2009-08-30 26 views
3

Est-ce que quelqu'un sait s'il y a un attribut équililant de "gradientUnits = userSpaceOnUse" de SVG dans WPF pour un LinearGradientBrush? Je n'arrive pas à trouver ça.SVG -> gradient linéaire WPF

Si non, quelqu'un sait-il comment le calculer en (C# ou VB.NET)? Par exemple si j'ai un point de départ de 0,0 et EndPoint de 1,1 sur un rectangle de 100x100, l'angle est de 45 degrés. Cependant, quand je change la largeur ou la hauteur du Rectangle, par exemple Width = 150, l'axe n'est plus à 45 degrés. Comment pourrais-je calculer pour garder l'angle à 45 degrés dans un rectangle qui n'est pas un carré de sorte qu'il va du coin inférieur gauche au coin supérieur droit pour un gradientstop moyen.

+0

Quand vous dites changer la largeur ou la hauteur, transformez-vous le rectangle? Si oui, utilisez-vous Transform ou RelativeTransform alors? –

+0

Désolé, je ne pense pas que j'étais clair. Je ne change pas le W ou H après le fait - j'utilisais un carré de 100x100 comme exemple du résultat désiré (angle à 45 degrés) pour des rectangles de tailles différentes, par exemple 120x220. Le résultat souhaité est que s'il y a trois gradients de ligne, celui du milieu irait du bas à gauche du rect à la droite, directement sur cet axe. –

Répondre

3

Cela fonctionne comme un charme maintenant dans le nouveau Silverlight 4 - réglage de l'angle à 45 degrés en RotateTransform le fait pour la zone de délimitation au lieu de la forme. Comme ceci:

<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

Régler la brosse MappingMode = BrushMappingMode.Absolute

+0

merci. J'ai regardé Absolute, mais je n'ai pas compris comment calculer les emplacements des points de début et de fin. –