2010-01-12 2 views

답변

3

타원과 내장 된 브러시로는 할 수 없지만 이러한 모양을 직접 작성하는 것은 어렵지 않습니다.

"원형 조각"모양을 많이 그리며 각 조각에 다른 선형 그래디언트 브러시를 적용 할 수 있습니다.

이것은 당신이 시작하는 것입니다 :

class GradiantEllipse : FrameworkElement 
{ 
    private const double N = 100; 

    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
    { 
     var radius = Math.Min(ActualWidth/2,ActualHeight/2); 
     var center = new Point(ActualWidth/2,ActualHeight/2); 
     for (int i = 0; i < N; ++i) 
     { 
      var startAngle = (Math.PI*2/N)*i; 
      var endAngle = (Math.PI*2/N)*(i+1)+2*(Math.PI/radius)+1/(2*Math.PI+radius); // + 1px to avoid gap 
      var start = new Point(Math.Cos(startAngle)*radius+center.X, 
       Math.Sin(startAngle)*radius+center.Y); 
      var end = new Point(Math.Cos(endAngle)*radius+center.X, 
       Math.Sin(endAngle)*radius+center.Y); 
      var figure = new PathFigure(); 
      figure.StartPoint = center; 
      figure.Segments.Add(new LineSegment(start,false)); 
      figure.Segments.Add(new LineSegment(end,false)); 
      figure.IsClosed = true; 
      var geo = new PathGeometry(); 
      geo.Figures.Add(figure); 

      var gradiant = new LinearGradientBrush(
       Color.FromArgb(255, (byte)((255.0/N) * i), (byte)((255.0/N) * i), (byte)((255.0/N) * i)), 
       Color.FromArgb(255, (byte)((255.0/N) * (i + 1)), (byte)((255.0/N) * (i + 1)), (byte)((255.0/N) * (i + 1))), 
       Math.Atan2(end.Y - start.Y, end.X - start.X) * 180/Math.PI); 

      drawingContext.DrawGeometry(gradiant, null, geo); 
     } 
    } 
} 
+0

감사합니다 잔뜩. 나는 이것이 "진정한"벡터 그래픽 솔루션에 가장 가깝다고 생각합니다. – toxvaerd

1

가장 적합한 방법은 타원을 분기로 나누고 각각 RadialGradientBrush으로 채우는 사용자 지정 드로잉 지침으로 DrawingBrush을 만드는 것입니다.