我正在使用System.Windows.Forms.DataVisualization.Charting.Chart控件,并让ChartArea的AxisX和Y都将Zoomable设置为true . 当图表放大时,我会看到滚动条,但无法拖动它 . 是否可以拖动滚动条,并在拖动滚动条按钮时让图表显示移动?我希望为用户提供直观和互动的功能 . 谢谢!
为了放大和缩小图表我正在使用MouseWheel事件 . 我将在下面展示的解决方案远非完美,但它起作用,至少对我而言:) .
应为每个数据系列计算maxChangeRange和minChangeRange的值(21和-1是我在项目中使用的值) . 另外,假设两个轴具有相似的值范围,如果它们不同则需要为它们中的一个添加某种缩放 .
从MouseEventArgs(e.X和e.Y)接收的鼠标位置是图表控件内的鼠标位置,而不是图表:),因此这种位置缩放功能有点错误 .
为了使其工作,您需要定义图表区域和轴的图表控件
如果启用了轴标签自动调整,则在缩放时图表可能会有点“跳跃” .
我是C#的初学者并且赢得了世界,所以请记住,这可能不是最佳解决方案 .
// 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);
1 回答
为了放大和缩小图表我正在使用MouseWheel事件 . 我将在下面展示的解决方案远非完美,但它起作用,至少对我而言:) .
应为每个数据系列计算maxChangeRange和minChangeRange的值(21和-1是我在项目中使用的值) . 另外,假设两个轴具有相似的值范围,如果它们不同则需要为它们中的一个添加某种缩放 .
从MouseEventArgs(e.X和e.Y)接收的鼠标位置是图表控件内的鼠标位置,而不是图表:),因此这种位置缩放功能有点错误 .
为了使其工作,您需要定义图表区域和轴的图表控件
如果启用了轴标签自动调整,则在缩放时图表可能会有点“跳跃” .
我是C#的初学者并且赢得了世界,所以请记住,这可能不是最佳解决方案 .
此事件需要附加到图表控件: