如何从类中引发和捕获鼠标事件(不从控件继承)

本文关键字:事件 鼠标 控件 继承 | 更新日期: 2023-09-27 18:15:46

我遇到了一些麻烦,我需要帮助!

我的背景:

在虚拟地球3D地图上显示代码生成多边形的WPF windows应用程序。

我的问题:

无法将生成的多边形转换为"可点击的项目"。

已完成的步骤:

我的第一种方法是使用VE的事件附加管道,这只不过是"观察"在3D全局控件上引发的所有事件,并返回在点击位置上存在的所有事件的列表。虽然它是有效的,但每次鼠标点击时我都会得到一个可怕的偏移,这使得这种方法现在毫无用处。

我的第二种方法是将鼠标单击处理程序附加到多边形。为了达到这个效果,我创建了这个类:

  public class ExtendedPolygon:PolygonGeometry
  {
  }

扩展了原来的PolygonGeometry对象。然后,我遵循了在这个线程上放置的建议,给类点击事件c#实现事件"监听器"和处理程序,像这样:

public event EventHandler<MouseEventArgs> Click;
protected void OnClick(MouseEventArgs e)
    {
        EventHandler<MouseEventArgs> handler = Click;
        if (handler != null)
        {
            handler(this, e);
        }
    }
 internal void CheckIfClicked(MouseEventArgs e) 
 {
   OnClick(e);
 }

然后(为了在测试时简单起见),我在页面后面的视图代码中附加了所有事件:

polygon.Click +=new EventHandler<MouseEventArgs>(polygon_MouseClick);

void pol_MouseClick(object sender, MouseEventArgs e)
    {
            ShowBox(" ShapeId:" + "I clicked");  
    }

所以,我的代码运行,多边形被渲染,但没有引发点击事件。给我留下了以下问题:

-我做错了吗?我应该如何在WPF上附加所有管道来捕获和引发类(不继承控件)的鼠标事件?

-有什么办法解决这个问题吗?

感谢您的阅读和花时间处理这件事!

PS:如果有人知道一个更好的方式来附加事件到虚拟地球多边形,我洗耳恭听=)

如何从类中引发和捕获鼠标事件(不从控件继承)

我没有看到实际调用CheckIfClicked的代码,在原来的帖子中,这是在OnMouseUp覆盖中完成的。你有没有类似的代码在你的应用程序的某个地方,没有在你的问题中列出?