2009-08-30 6 views
3

LinearGradientBrush에 대한 WPF에서 SVG의 "gradientUnits = userSpaceOnUse"의 동등한 속성이 있는지 아는 사람이 있습니까? 나는 이것을 찾을 수없는 것 같습니다.SVG -> WPF 선형 그래디언트

그렇지 않다면 누구나 (C# 또는 VB.NET)에서 계산하는 방법을 알고 있습니까? 예를 들어 100x100 인 Rectangle에 StartPoint가 0,0이고 EndPoint가 1,1 인 경우 각도는 45도입니다. 그러나 Rectangle의 너비 또는 높이를 변경하면 (예 : Width = 150) 축이 더 이상 45 도가 아닙니다. 사각형이 아닌 직사각형에서 45도 각도를 유지하도록 계산하여 중간 그라디언트 정지의 왼쪽 하단에서 오른쪽 상단 모서리까지 실행되도록하려면 어떻게 계산할 수 있습니까?

+0

너비 또는 높이를 변경한다고 말하면 사각형을 변형하고 있습니까? 그렇다면 Transform 또는 RelativeTransform을 사용하고 있습니까? –

+0

죄송합니다. 나는 분명하지 않다고 생각합니다. 사실 이후에 W 나 H를 변경하지 않습니다. 다른 크기의 사각형 (예 : 120x220)에 대해 원하는 결과 (각도 45도)의 예제로 100x100의 사각형을 사용했습니다. 원하는 결과는 세 개의 라인 그라디언트가있는 경우 가운데 하나가 rect의 왼쪽 하단에서 오른쪽 상단으로 직접 해당 축에서 실행된다는 것입니다. 덕분에 –

답변

3

이 새로운 실버 라이트 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

. Absolute를 살펴 보았지만 Start/End Point 위치를 계산하는 방법을 알지 못했습니다. –

관련 문제