繁体   English   中英

GetValueAtPosition 与 WPF 工具包图表的使用

[英]Use of GetValueAtPosition with WPF ToolKit Chart

我正在尝试在图表上获取鼠标的 X 坐标 position。 查看此站点上的其他一些代码,我有

    private void Chart_MouseMove(object sender, MouseEventArgs e)
    {
       var chart = (Chart)sender;
        var xAxisRange = (IRangeAxis)chart.Axes[0];
        var mousePositionInPixels = e.GetPosition(chart);
        double mouseXPositionInChartUnits = (double)xAxisRange.GetValueAtPosition(new UnitValue(mousePositionInPixels.X, Unit.Pixels));
        TextBoxR0.Text = mouseXPositionInChartUnits.ToString(); //temp display textBox for debugging
        RaisePropertyChanged();
    }

问题是这些值向左移动了一个常数。 原点的 X 值为 0,但 GetValueAtPosition 正在返回,例如 15,并且所有返回的 x 值都比应有的值大 15。 如果我水平扩展图表,偏移量会发生变化,变得更小。 如果我水平收缩图表,偏移量会变大。 我已经进行了广泛的搜索以寻找答案,并寻找了一些图表成员可能会给我一个左边距偏移,但没有成功。

我知道这个答案很晚,但我遇到了同样的问题。 我的解决方案是让鼠标 position 相对于系列而不是图表。 它并不完美(在 1366 x 720 的分辨率下相差一个或 2 个像素),但当四舍五入到 2 个位置时,它对我来说已经足够了。

在我的 xaml 中,我给这个系列起了一个名字(“系列”,虽然不是原创)。 我还有一个绑定到字符串Pos的 TextBlock,所以我可以看到 cursor 的 position。 我已将系列的ItemsSource绑定到List<KeyValuePair<Double, Double>> Points最后,不要忘记 y 轴相对于屏幕坐标翻转(y 轴随着您向上移动而增加,但屏幕坐标增加当你向下移动时),这就是为什么那里有一个1.0 – yAxisRange

Xaml:

<chartingToolkit:Chart Name="columnChart" MouseMove="Chart_MouseMove">
    <chartingToolkit:LineSeries Name="Series" ItemsSource="{Binding Points}" DependentValuePath="Value" IndependentValuePath="Key" />
</chartingToolkit:Chart>

代码:

private void Chart_MouseMove(object sender, MouseEventArgs e)
{
    var chart = (Chart)sender;
    var mousePositionInPixels = e.GetPosition(Series);

    var xAxisRange = (IRangeAxis)chart.ActualAxes[0];
    double mouseXPositionInChartUnits = (double)xAxisRange.GetValueAtPosition(new UnitValue(mousePositionInPixels.X, Unit.Pixels));

    var yAxisRange = (IRangeAxis)chart.ActualAxes[1];
    double mouseYPositionInChartUnits = 1.0 - (double)yAxisRange.GetValueAtPosition(new UnitValue(mousePositionInPixels.Y, Unit.Pixels));

    Pos = $"({Math.Round(mouseXPositionInChartUnits, 2)}, {Math.Round(mouseYPositionInChartUnits, 2)})";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM