获取C#中的图表区域范围

时间:2012-09-05 13:29:01

标签: c# charts

为了解释我在做什么,我在图表上绘制了两个选择器,而未选中的部分应该出现在该蓝色矩形下面。将被选中的部分将出现在两个选择器之间的白色区域中。下图仅显示左选择器。

现在,我要做的是在图表中绘制一个矩形,该矩形始终保留在绘图区域内,即使调整了窗口大小。

要获得顶部,左侧和底部边界,以绘制如下图所示的矩形,我执行以下操作:

(...)
int top = (int)(Chart.Height * 0.07);
int bottom = (int)(Chart.Height - 1.83 * top);
int left = (int)(0.083 * Chart.Width);
Brush b = new SolidBrush(Color.FromArgb(128, Color.Blue));
e.Graphics.FillRectangle(b, left, top, marker1.X - left, bottom - top);
(...)

但这远非完美,并且在调整窗口大小时不会在正确的位置绘制。我希望蓝色矩形始终由绘图区域网格绑定在顶部,左侧和底部。这可能吗?

Chart

1 个答案:

答案 0 :(得分:1)

您可能希望使用StripLine来实现此目的。 查看Stripline Class Documentation。 另外,我建议下载Charting Samples,这对理解各种功能有很大帮助。

StripLine stripLine = new StripLine();    
stripLine.Interval = 0;       // Set Strip lines interval to 0 for non periodic stuff
stripLine.StripWidth = 10;    // the width of the highlighted area
stripline.IntervalOffset = 2; // the starting X coord of the highlighted area
// pick you color etc ... before adding the stripline to the axis
chart.ChartAreas["Default"].AxisX.StripLines.Add( stripLine );

这假设您想要的东西不是Cursor已经做过的事情(请参阅CursorX),例如让用户标记图中提供一些持久性的区域。将Cursor事件与上面的带状线组合起来是一种很好的方法。

因此,要突出显示光标的开始和结束,您可以执行此操作

// this would most likely be done through the designer
chartArea1.AxisX.ScaleView.Zoomable = false;
chartArea1.CursorX.IsUserEnabled = true;
chartArea1.CursorX.IsUserSelectionEnabled = true;
this.chart1.SelectionRangeChanged += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CursorEventArgs>(this.chart1_SelectionRangeChanged);
...

private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e)
    {
        chart1.ChartAreas[0].AxisX.StripLines.Clear();

        StripLine stripLine1 = new StripLine();
        stripLine1.Interval = 0;
        stripLine1.StripWidth = chart1.ChartAreas[0].CursorX.SelectionStart - chart1.ChartAreas[0].AxisX.Minimum;
        stripLine1.IntervalOffset = chart1.ChartAreas[0].AxisX.Minimum;
        // pick you color etc ... before adding the stripline to the axis
        stripLine1.BackColor = Color.Blue;
        chart1.ChartAreas[0].AxisX.StripLines.Add(stripLine1);

        StripLine stripLine2 = new StripLine();
        stripLine2.Interval = 0;
        stripLine2.StripWidth = chart1.ChartAreas[0].AxisX.Maximum - chart1.ChartAreas[0].CursorX.SelectionEnd;
        stripLine2.IntervalOffset = chart1.ChartAreas[0].CursorX.SelectionEnd;
        // pick you color etc ... before adding the stripline to the axis
        stripLine2.BackColor = Color.Blue;
        chart1.ChartAreas[0].AxisX.StripLines.Add(stripLine2);
    }

不知怎的,我怀疑你可能还没有发现光标,这样做会使所有这些无关紧要。但无论如何,上面的代码将按照你的描述进行。