如何在C# WPF中带参数绘制圆弧?DrawEllipse绘制错误怎么解决
WPF C# 使用DrawingContext绘制圆弧的实现方案
首先明确:DrawingContext 类没有原生的DrawArc方法,你当前使用的 DrawEllipse 方法用于绘制完整的椭圆形/圆形,无法满足圆弧绘制需求,需要结合 PathGeometry 和 ArcSegment 实现圆弧绘制。
实现核心逻辑
- 定义圆弧的中心点、半径、起始角度、结束角度
- 创建
PathFigure对象设置圆弧起点 - 添加
ArcSegment对象配置圆弧的参数(半径、结束点、是否大弧、旋转方向等) - 将
PathFigure添加到PathGeometry,最后调用DrawingContext.DrawGeometry绘制
完整示例代码
DrawingVisual d = new DrawingVisual(); // 可以自行调整画笔粗细 System.Windows.Media.Pen pen = new System.Windows.Media.Pen(Brushes.Black, 1); DrawingContext drawingContext = d.RenderOpen(); // 基础参数配置 // 你原来的0.4/0.5像素太小几乎不可见,可以根据画布尺寸调整为合适的数值 Point center = new Point(100, 100); double radiusX = 50; // X轴半径 double radiusY = 50; // Y轴半径,和X一致就是正圆的圆弧 double startAngle = 0; // 起始角度 单位:度 double endAngle = 90; // 结束角度 单位:度,这里示例画90度的圆弧 // 计算圆弧起始点和结束点坐标 Point startPoint = new Point( center.X + radiusX * Math.Cos(startAngle * Math.PI / 180), center.Y + radiusY * Math.Sin(startAngle * Math.PI / 180) ); Point endPoint = new Point( center.X + radiusX * Math.Cos(endAngle * Math.PI / 180), center.Y + radiusY * Math.Sin(endAngle * Math.PI / 180) ); // 构造几何图形 PathGeometry pathGeometry = new PathGeometry(); PathFigure pathFigure = new PathFigure(); pathFigure.StartPoint = startPoint; // 配置圆弧参数 ArcSegment arcSegment = new ArcSegment() { Point = endPoint, Size = new Size(radiusX, radiusY), RotationAngle = 0, IsLargeArc = endAngle - startAngle > 180, // 角度差超过180度时启用大弧 SweepDirection = SweepDirection.Clockwise // 绘制方向:顺时针 }; pathFigure.Segments.Add(arcSegment); pathGeometry.Figures.Add(pathFigure); // 绘制圆弧 drawingContext.DrawGeometry(null, pen, pathGeometry); // 原来的测试小圆可以保留 drawingContext.DrawEllipse(Brushes.White, pen, center, 4,4); drawingContext.Close(); canvas.Children.Add(new VisualHost { Visual = d });
补充说明
如果需要绘制闭合的扇形,可以在PathFigure中额外添加两条线段,连接圆弧的起始点、结束点到圆心即可。
内容的提问来源于stack exchange,提问作者csharp_devloper31
相关产品推荐
相关产品推荐

