如何真正滚动和缩放MS Chart控件?

时间:2012-10-11 10:27:44

标签: .net scroll mschart zooming dundas

我正在使用MS Chart控件4进行趋势分析。

我使用鼠标滚轮和右按钮集成了缩放和滚动功能,使控件具有不寻常的平滑度。

但是,我重新确认了 ChartArea.Axis方法ScaleView.ScrollScaleView.Zoom实际上不会缩放或滚动网格,标签和带状线。

相反,它会缩放和滚动点系列,但保持网格标签不变,只调整标签值。

例如,如果我想将此示例图表向右滚动:

enter image description here

我有这个。

enter image description here

基本上,这就是我想要实现的目标:

enter image description here

如何使用MS Chart控件实现真正的滚动和缩放?

编辑:我设法通过将X值设置为DateTimes来获得想要的行为。但是,我想在X轴上使用双打。

2 个答案:

答案 0 :(得分:1)

似乎这种行为是设计的:只有DateTime类型的轴值允许我的图表顺利滚动。

答案 1 :(得分:1)

您可以根据ScaleView.Position手动调整IntervalOffset

每当图表更新时调用此代码(例如,在AxisViewChanged和AxisScrollBarClicked事件上)

if (chart1.ChartAreas[0].AxisY.ScaleView.IsZoomed)
{
    double offset = chart1.ChartAreas[0].AxisY.Minimum - chart1.ChartAreas[0].AxisY.ScaleView.Position;

    chart1.ChartAreas[0].AxisY.LabelStyle.IntervalOffset = offset;
    chart1.ChartAreas[0].AxisY.MajorGrid.IntervalOffset = offset;
    chart1.ChartAreas[0].AxisY.MajorTickMark.IntervalOffset = offset;
    chart1.ChartAreas[0].AxisY.MinorGrid.IntervalOffset = offset;
    chart1.ChartAreas[0].AxisY.MinorTickMark.IntervalOffset = offset;
}
else
{
    chart1.ChartAreas[0].AxisY.LabelStyle.IntervalOffset = 0;
    chart1.ChartAreas[0].AxisY.MajorGrid.IntervalOffset = 0;
    chart1.ChartAreas[0].AxisY.MajorTickMark.IntervalOffset = 0;
    chart1.ChartAreas[0].AxisY.MinorGrid.IntervalOffset = 0;
    chart1.ChartAreas[0].AxisY.MinorTickMark.IntervalOffset = 0;
}