wpf C# 使用绘图控件将现有数据绘制成折线图,后鼠标点击折线图上的点时返回数值
时间: 2024-03-17 07:42:09 浏览: 88
您好!关于 WPF C# 使用绘图控件将现有数据绘制成折线图,并在鼠标点击折线图上的点时返回数值,以下是一个简单的示例:
首先,我们需要在 XAML 中定义一个 Canvas 控件,用于绘制折线图:
```xml
<Canvas x:Name="canvas" Width="400" Height="300" Background="White" MouseLeftButtonDown="canvas_MouseLeftButtonDown" />
```
然后,在 C# 代码中,我们可以使用 Polyline 控件绘制折线图,并在 MouseLeftButtonDown 事件中获取鼠标点击的坐标,计算对应的数值并返回:
```csharp
private void DrawLineChart(List<double> data)
{
// 计算坐标系的大小和位置
double xMin = 0;
double xMax = data.Count - 1;
double yMin = data.Min();
double yMax = data.Max();
double xRange = xMax - xMin;
double yRange = yMax - yMin;
double xScale = canvas.ActualWidth / xRange;
double yScale = canvas.ActualHeight / yRange;
// 创建折线图的路径
Polyline polyline = new Polyline();
polyline.Stroke = Brushes.Blue;
polyline.StrokeThickness = 2;
for (int i = 0; i < data.Count; i++)
{
double x = i * xScale;
double y = (yMax - data[i]) * yScale;
polyline.Points.Add(new Point(x, y));
}
// 将路径添加到 Canvas 控件中
canvas.Children.Clear();
canvas.Children.Add(polyline);
}
private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 获取鼠标点击的坐标
Point mousePosition = e.GetPosition(canvas);
// 计算对应的数值
double xMin = 0;
double xMax = data.Count - 1;
double yMin = data.Min();
double yMax = data.Max();
double xRange = xMax - xMin;
double yRange = yMax - yMin;
double xScale = canvas.ActualWidth / xRange;
double yScale = canvas.ActualHeight / yRange;
double xValue = mousePosition.X / xScale;
double yValue = yMax - mousePosition.Y / yScale;
// 返回数值
MessageBox.Show(string.Format("X={0:F2}, Y={1:F2}", xValue, yValue));
}
```
在这个示例中,我们假设 data 是一个包含数值数据的 List<double>。在 DrawLineChart 方法中,我们计算出折线图中每个点的坐标,并使用 Polyline 控件绘制折线图。在 canvas_MouseLeftButtonDown 方法中,我们获取鼠标点击的坐标,并计算出对应的数值,然后使用 MessageBox 显示数值。
希望这个示例对您有所帮助!
阅读全文