我正在 Windows 窗体上的控件上画一条线,如下所示:
// Get Graphics object from chart
Graphics graph = e.ChartGraphics.Graphics;
PointF point1 = PointF.Empty;
PointF point2 = PointF.Empty;
// Set Maximum and minimum points
point1.X = -110;
point1.Y = -110;
point2.X = 122;
point2.Y = 122;
// Convert relative coordinates to absolute coordinates.
point1 = e.ChartGraphics.GetAbsolutePoint(point1);
point2 = e.ChartGraphics.GetAbsolutePoint(point2);
// Draw connection line
graph.DrawLine(new Pen(Color.Yellow, 3), point1, point2);
我想知道是否可以绘制虚线(点)而不是常规实线?
一旦您弄清楚定义破折号的格式,事情就非常简单了:
float[] dashValues = { 5, 2, 15, 4 };
Pen blackPen = new Pen(Color.Black, 5);
blackPen.DashPattern = dashValues;
e.Graphics.DrawLine(blackPen, new Point(5, 5), new Point(405, 5));
float数组中的数字代表不同颜色的破折号长度。因此,对于每个亮 2 个像素(黑色)和亮 2 个像素的简单破折号,您的阵列将如下所示:
{2,2}
然后该图案会重复。如果您想要 5 宽的破折号,间隔为 2 个像素,您可以使用 {5,2}
在你的代码中它看起来像:
// Get Graphics object from chart
Graphics graph = e.ChartGraphics.Graphics;
PointF point1 = PointF.Empty;
PointF point2 = PointF.Empty;
// Set Maximum and minimum points
point1.X = -110;
point1.Y = -110;
point2.X = 122;
point2.Y = 122;
// Convert relative coordinates to absolute coordinates.
point1 = e.ChartGraphics.GetAbsolutePoint(point1);
point2 = e.ChartGraphics.GetAbsolutePoint(point2);
// Draw (dashed) connection line
float[] dashValues = { 4, 2 };
Pen dashPen= new Pen(Color.Yellow, 3);
dashPen.DashPattern = dashValues;
graph.DrawLine(dashPen, point1, point2);
我认为你可以通过改变你用来画线的笔来实现这一点。 因此,将示例中的最后两行替换为:
var pen = new Pen(Color.Yellow, 3);
pen.DashStyle = DashStyle.Dash;
graph.DrawLine(pen, point1, point2);
Pen
有一个公共属性,定义为
public DashStyle DashStyle { get; set; }
如果你想画虚线,可以设置
DasStyle.Dash
。
Pen.DashPattern 可以做到这一点。 看这里的例子。
在更现代的 C# 中:
var dottedPen = new Pen(Color.Gray, width: 1) { DashPattern = new[] { 1f, 1f } };
要回答有关使用隐藏代码生成虚线的问题:
Pen dashPenTest = new(Brushes.DodgerBlue, 1);
Line testLine = new()
{
Stroke = dashPenTest.Brush, //Brushes.Aqua,
StrokeThickness = dashPenTest.Thickness,//1,
StrokeDashArray = new DoubleCollection() { 8,4 },
X1 = 0,
X2 = canvas.Width,
Y1 = 10,
Y2 = 10
};
canvas.Children.Add(testLine);
这个答案利用了 xaml 中画布的生成:
<Canvas x:Name ="canvas" Background="White" Height="300" Width="300">
这里重要的方法是“StrokeDashArray”,它为绘制的线生成虚线。更多信息如下:Shape.StrokeDashArray