当前,我一直在Windows窗体上的图形上做一个项目。现在我有话要问。 是否有办法将Stripeline标签从图表中移出,而不在图表中移至类似What I expect it to be的位置,并且使我的Stripeline着色器太厚了?
till date what i do What I expect it to be
如果有需要,这是我的带状线代码
StripLine stripLine1 = new StripLine();
stripLine1.StripWidth = 0.01;
stripLine1.BorderColor = System.Drawing.Color.Blue;
stripLine1.BorderWidth = 0;
stripLine1.BorderDashStyle = ChartDashStyle.Solid;
stripLine1.IntervalOffset = Convert.ToDouble(textBox7.Text);
stripLine1.BackColor = System.Drawing.Color.Blue;
stripLine1.Text = "x̅";
chart1.ChartAreas[0].AxisY.StripLines.Add(stripLine1);
答案 0 :(得分:0)
否,StripLines
仅绘制在其ChartArea
内。
至少有两个选择:
Text
事件来在其外部显示其PaintXXX
,private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
ChartArea ca = chart1.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
Graphics g = e.ChartGraphics.Graphics;
foreach (StripLine sl in ay.StripLines)
{
double v = (sl.Interval != double.NaN ? sl.Interval : 0) + sl.IntervalOffset;
TextRenderer.DrawText(g, sl.Text, sl.Font, new Point(
(int)ax.ValueToPixelPosition(ax.Maximum),
(int)ay.ValueToPixelPosition(v)),Color.Black);
}
}
微调位置,也许要靠尊重TextAlignment
属性由您决定。
请注意,这将现在显示两次文本;一种使原始标签透明的简单解决方案:
YourStripLine.ForeColor = Color.Transparent;
还请注意,如果对图表进行序列化,则不会导出绘制的图形。
CustomLabels
。再三考虑,我认为这是可取的,至少在不需要次要y轴的情况下。我在这里只做一条带状线:
Axis ay2 = chart1.ChartAreas[0].AxisY2;
ay2.Enabled = AxisEnabled.True;
ay2.LineColor = Color.Transparent;
CustomLabel cl = new CustomLabel();
cl.Text = stripLine.Text;
double v = (stripLine.Interval != double.NaN ? stripLine.Interval : 0)
+ stripLine.IntervalOffset;
cl.FromPosition = v - 0.001;
cl.ToPosition = v + 0.001;
ay2.CustomLabels.Add(cl);
您在这里还希望使原始文本透明。