我已将Polyline注释添加到图形控件中。但是在Addline()方法中给定的数据点没有正确对齐。
PolylineAnnotation annotation = new PolylineAnnotation();
annotation.AxisX = chart1.ChartAreas[0].AxisX;
annotation.AxisY = chart1.ChartAreas[0].AxisY;
annotation.AnchorX = 0;
annotation.AnchorY = 0;
annotation.Height = 30;
annotation.Width = -30;
annotation.LineWidth = 3;
annotation.StartCap = LineAnchorCapStyle.None;
annotation.EndCap = LineAnchorCapStyle.None;
annotation.Alignment = ContentAlignment.BottomLeft;
annotation.AnchorAlignment = ContentAlignment.BottomRight;
annotation.AnchorDataPoint = new DataPoint(this.chart1.Series[0]);
annotation.AllowAnchorMoving = true;
annotation.AllowMoving = true;
annotation.AllowPathEditing = true;
annotation.AllowResizing = true;
annotation.AllowSelecting = true;
annotation.GraphicsPath.AddLine(10, 20, 30, 30);
chart1.Annotations.Add(annotation);
答案 0 :(得分:0)
Annotations
复杂,并将它们锚定起来。
开始相当简单:要锚定Annotation
,您需要将其AnchorDataPoint
设置为现有 DataPoint
。< / p>
这一行没有那样:
annotation.AnchorDataPoint = new DataPoint(this.chart1.Series[0]);
因为新创建的DataPoint
为空。它已被添加,其值为(0d, 0d)
,但您可能希望Annotation
与真实 DataPoint
保持一致,可能是这样的..:
annotation.AnchorDataPoint = chart1.Series[0].Points[someIndex];
但还有更多:实际上有两种方法来锚定Annotation
:
DataPoint
或AnchorX
和AnchorY
值来锚定它。(然后你也可以将它们设置为固定的X和Y值。)
你的代码实际上都做到了! 但:锚定坐标需要优先级而不是锚定到DataPoint
。
这很好,因为你可以将它们和第一个锚点组合到一个DataPoint
,然后将一个的坐标锚定到一个固定的值:比如,x值保持在点但是y值可能始终为0 ..
另请注意,您只需在折线上添加一条线,而不是在(0,0)
处开始,而是在(10,20)
开始,可能远离锚..
然后折线本身存在尺寸和对齐的问题!
它的大小以像素为单位给出MSDN 声明。这是废话。相反,它是在两个value
的{{1}}单位中给出的。当您调整大小 Axes
Chart
也会调整大小时,您可以看到此消息;看截图!
Annotation
及其要点, 现在:这些是GraphicsPath
的{{1}}的百分比。为了感受这一点,添加一个包含整个区域的测试注释路径:
Size
以下是我们所拥有的截图:
正如您所看到的那样,最合乎逻辑的对齐方式是Annotation
,并且在将该行转换为 annotation.GraphicsPath.AddRectangle(new Rectangle(0, 0, 100, 100));
后,它会直接进入该点。
请注意,我添加了第二个TopLeft
以使锚点数据突出显示... - 另请注意,(0,0)
尺寸为正方形 {{1与整个图表一起水平拉伸。
这是我使用的完整代码:
Series
另请注意,为了确保没有错误的锚点处于活动状态,我将<{>}重置 Annotation
和(10,10)
值设置为PolylineAnnotation annotation = new PolylineAnnotation();
annotation.AxisX = chart1.ChartAreas[0].AxisX;
annotation.AxisY = chart1.ChartAreas[0].AxisY;
annotation.Height = 10;
annotation.Width = 10;
annotation.LineWidth = 3;
annotation.StartCap = LineAnchorCapStyle.None;
annotation.EndCap = LineAnchorCapStyle.None;
annotation.Alignment = ContentAlignment.TopLeft;
annotation.AnchorAlignment = ContentAlignment.TopLeft;
annotation.X = annotation.Y = annotation.AnchorX = annotation.AnchorY = double.NaN;
DataPoint dp = chart1.Series[0].Points[33];
annotation.AnchorDataPoint = dp;
chart1.Series[1].Points.AddXY(dp.XValue, dp.YValues[0]); // my red points series
annotation.AllowAnchorMoving = true;
annotation.AllowMoving = true;
annotation.AllowPathEditing = true;
annotation.AllowResizing = true;
annotation.AllowSelecting = true;
annotation.GraphicsPath.AddLine(10, 20, 30, 30);
Rectangle r = new Rectangle(0, 0, 100, 100);
annotation.GraphicsPath.AddRectangle(r);
chart1.Annotations.Add(annotation);
!这里并不是真的需要,因为这些都是默认值。