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

时间:2011-11-23 17:53:46

标签: c# wpf class mouseevent polygon

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

我的上下文:

WPF Windows应用程序,它在Virtual Earth 3D地图上显示代码生成的多边形。

我的问题:

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

到目前为止采取的步骤:

我的第一种方法是使用VE的事件附加管道,这只不过是“观察”通过3D globe控件引发的所有事件,并返回点击位置上存在的所有内容的列表。虽然它有效,但每次点击鼠标都会得到很大的偏移,这使得这种方法暂时无用。

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

  public class ExtendedPolygon:PolygonGeometry
  {

  }

扩展了原始的PolygonGeometry对象。然后我按照这个线程giving classes click events 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:如果有人知道更好的方法将事件附加到虚拟地球多边形,我全都耳朵=)

1 个答案:

答案 0 :(得分:0)

我没有看到实际调用CheckIfClicked的代码,在原始帖子中这是在OnMouseUp覆盖中完成的。您的应用中是否有类似代码中没有列出的类似代码?