You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取LiveCharts笛卡尔图表中点的窗口坐标系像素坐标?

解决LiveCharts WPF笛卡尔图表ConvertToPixels返回(0,0)的问题

问题根源

ConvertToPixels始终返回(0,0),核心原因是调用时机过早——图表还未完成渲染,内部布局测量、坐标轴映射逻辑未初始化;或是未正确指定转换对应的坐标轴。

解决方案

1. 等待图表渲染完成后调用方法

WPF控件需在Loaded事件触发后才完成布局计算,因此要在图表或窗口的Loaded事件中执行坐标转换,而非构造函数内直接调用。

2. 正确使用ConvertToPixels方法

转换时需明确指定目标X/Y轴,注意:当X轴使用Labels分类轴时,X值对应标签的索引(从0开始),而非标签文本。

完整修改后的VB.NET代码

Imports LiveCharts
Imports LiveCharts.Wpf

Class MainWindow
    Public Sub New()
        InitializeComponent()

        Dim seriesCollection As New SeriesCollection From {
            New LineSeries With {
                .Title = "系列1",
                .Values = New ChartValues(Of Double) From {4, 6, 5, 2, 7}
            },
            New LineSeries With {
                .Title = "系列2",
                .Values = New ChartValues(Of Double) From {6, 7, 3, 4, 6}
            }
        }

        cartesianChart1.Series = seriesCollection

        cartesianChart1.AxisX.Add(New Axis With {
            .Title = "X轴",
            .Labels = {"1", "2", "3", "4", "5"}
        })

        cartesianChart1.AxisY.Add(New Axis With {
            .Title = "Y轴",
            .LabelFormatter = Function(value) value.ToString()
        })

        ' 绑定图表加载完成事件
        AddHandler cartesianChart1.Loaded, AddressOf OnChartLoaded
    End Sub

    Private Sub OnChartLoaded(sender As Object, e As RoutedEventArgs)
        ' 示例:转换系列1中第3个点(索引2,对应X标签"3",Y值5)
        Dim xAxis = cartesianChart1.AxisX(0)
        Dim yAxis = cartesianChart1.AxisY(0)

        ' 分类轴的X值为标签索引
        Dim chartPoint = New ChartPoint(2, 5)
        ' 获取图表内部像素坐标
        Dim chartPixel = cartesianChart1.ConvertToPixels(chartPoint, xAxis, yAxis)

        ' 转换为窗口坐标系
        Dim windowPoint = cartesianChart1.PointToScreen(chartPixel)

        ' 输出结果
        MessageBox.Show($"图表内像素坐标:({chartPixel.X}, {chartPixel.Y})
窗口坐标系坐标:({windowPoint.X}, {windowPoint.Y})")
    End Sub
End Class

关键注意事项

  • 调用时机:必须在控件Loaded事件触发后执行,此时图表已完成布局,坐标轴的范围和映射关系已初始化。
  • 分类轴X值规则:使用Labels的X轴,X坐标对应标签的索引(从0开始),而非标签的文本内容。
  • 坐标系转换:ConvertToPixels返回的是图表控件内部的相对坐标,需通过PointToScreen方法转换为窗口/屏幕坐标系。

内容的提问来源于stack exchange,提问作者Apollo11Mission

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:23:16