.net 如何在图表控件中获取鼠标指针附近的Visual/Framework元素

.net 如何在图表控件中获取鼠标指针附近的Visual/Framework元素,.net,wpf,c#-4.0,charts,.net,Wpf,C# 4.0,Charts,我正在开发一个自定义控件,它可以在上面绘制曲线,并允许用户通过单击来更改曲线的属性。现在,捕捉曲线上的事件本身非常困难,因为根据用户需求,它们可能非常薄 我想增加曲线的点击选择。 我有一个解决方案,但它确实是昂贵的,因为我有大量的曲线在我的图表。这就是为什么我在寻找一种逻辑,通过它我可以找到鼠标指针周围的有限曲线 我试过HitTest,但没用。 我在谷歌上搜索了很多问题的答案,但没有找到答案 如果有人能对这个话题有所了解,并给我一个正确的前进方向,那将是一个很大的帮助 提前感谢。您必须自己实现此

我正在开发一个自定义控件,它可以在上面绘制曲线,并允许用户通过单击来更改曲线的属性。现在,捕捉曲线上的事件本身非常困难,因为根据用户需求,它们可能非常薄

我想增加曲线的点击选择。 我有一个解决方案,但它确实是昂贵的,因为我有大量的曲线在我的图表。这就是为什么我在寻找一种逻辑,通过它我可以找到鼠标指针周围的有限曲线

我试过HitTest,但没用。 我在谷歌上搜索了很多问题的答案,但没有找到答案

如果有人能对这个话题有所了解,并给我一个正确的前进方向,那将是一个很大的帮助


提前感谢。

您必须自己实现此功能。你所能做的就是听下一行的MouseEnter/MouseLeave,如果你在初始MouseEnter/Leave的某个半径内得到mousedown,就把它算作点击

例如,在伪代码中:

OnMouseEnter()
{
    this.hittestPoint = currentMousePoint;
}

OnMouseLeave()
{
    this.hitTestPoint = currentMousePoint;
}

OnMouseDown()
{
    // Looking for mousedown within a 5 pixel radius of the line. 
    // Increase/decrease according to experimentation
    const double radius = 5;

    // Note see Euclidean distance for distance between vectors
    // http://en.wikipedia.org/wiki/Euclidean_distance
    double deltaX = (hitTestPoint.X - currentPoint.X);
    double deltaY = (hitTestPoint.Y - currentPoint.Y);
    double distance = Math.Sqrt(deltaX*deltaX + deltaY*deltaY);

    if(distance < radius) 
    {
         // Hittest detected!
    }
}

感谢Andrew Burnett Thompson博士的指导,这是一个很好的建议,我已经实现了几乎相同的解决方案,但使用OnMousehave,我想MouseEnter和MouseLeave的优先级将高于hover,这肯定会提高功能的可用性。再次感谢各位不用担心,很高兴能帮上忙!有时,一些人认为是黑客的东西实际上是一个非常聪明的解决方案-是的,你是绝对正确的,我自己认为我找到的解决方案是一个黑客,因为我无法找到框架提供的解决方案。你的建议被证明是一个比那更好的方法,它很有效。。。。再次感谢你展示了一条更好的道路。。。