我使用的是System.Windows.Forms.DataVisualization.Charting.Chart控件,并让ChartArea的AxisX和Y都将Zoomable设置为true。当图表放大时,我看到滚动条,但不能拖动它。是否可以拖动滚动条,并让图表显示随着我拖动滚动条按钮而移动?我想让用户直观和互动。谢谢!通过拖动滚动条使DataVisualization Chart对象缩放并可滚动
6
A
回答
2
为了放大和缩小图表我正在使用MouseWheel事件。我将在下面展示的解决方案远非完美,但它起作用,至少对我来说:)。
maxChangeRange和minChangeRange的价值应该被计算为每个数据系列(21和-1是我在项目中使用的值)。此外,假设两个轴的值范围相似,如果它们不同,则需要为其中的一个添加某种缩放比例。
从MouseEventArgs(e.X和e.Y)接收到的鼠标位置是图表控件中鼠标的位置,不在图表:)中,所以这种位置缩放功能是有问题的。
为了使它工作,你需要有图表控件与图表区域和轴定义
如果轴标签自动调整启用图表可能是有点“神经质”,而缩放。
我是C#和winforms世界的初学者,所以请记住,这可能不是最好的解决方案。
// Actual total zoom value int deltaScrollTotal; private void chart_MouseWheel(object sender, MouseEventArgs e) { int maxChangeRange = 21; int minChangeRange = -1; int deltaScroll = e.Delta/Math.Abs(e.Delta); deltaScrollTotal += deltaScrollTotal + deltaScroll > minChangeRange && deltaScrollTotal + deltaScroll < maxChangeRange ? deltaScroll : 0; // Additional calculation in order to obtain pseudo // "positional zoom" feature double minXScale = (double)e.X/(double)chart.Width; double maxXScale = 1 - minXScale; double minYScale = (double)e.Y/(double)chart.Height; double maxYScale = 1 - minYScale; // Max and min values into which axis need to be scaled/zoomed double maxX = chart.ChartAreas[0].AxisX.Maximum - deltaScrollTotal * maxXScale; double minX = chart.ChartAreas[0].AxisX.Minimum + deltaScrollTotal * minXScale; double maxY = chart.ChartAreas[0].AxisY.Maximum - deltaScrollTotal * minYScale; double minY = chart.ChartAreas[0].AxisY.Minimum + deltaScrollTotal * maxYScale; chart.ChartAreas[0].AxisX.ScaleView.Zoom(minX, maxX); chart.ChartAreas[0].AxisY.ScaleView.Zoom(minY, maxY); }
此事件需要被连接到图表控制:
chart.MouseWheel += new MouseEventHandler(chart_MouseWheel);
在问题已经回答了:http://stackoverflow.com/questions/1212914/enable-scrolling-on-the -Microsoft-图表控制换 - 窗口的形式 – 2012-10-07 23:48:33