XAML で次の図形を作成するにはどうすればよいですか?
代替テキスト http://mtx.dk/ellipse.png
<Ellipse Height="100" Width="100">
<Ellipse.Fill>
???
</Ellipse.Fill>
</Ellipse>
LinearGradientBrush はこのように変換できませんか? RadialGradientBrush も適していません。
何か案は?
XAML で次の図形を作成するにはどうすればよいですか?
代替テキスト http://mtx.dk/ellipse.png
<Ellipse Height="100" Width="100">
<Ellipse.Fill>
???
</Ellipse.Fill>
</Ellipse>
LinearGradientBrush はこのように変換できませんか? RadialGradientBrush も適していません。
何か案は?
楕円と組み込みのブラシではできませんが、そのような形状を自分で書くことは難しくありません。
多くの「パイ スライス」シェイプを描画し、各スライスに異なる線形グラデーション ブラシを適用できます。
これで始められます:
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);
}
}
}
あなたの最善の策はDrawingBrush
、いくつかのカスタム描画命令で を作成することです。おそらく、楕円を 4 分の 1 に分割し、それぞれを異なる で埋めますRadialGradientBrush
。