2011-11-23 56 views
2

我遇到了一些麻烦,我需要帮助!如何从类中提取和捕获鼠标事件(不从控件继承)?

我的背景:显示一个虚拟地球3D地图上的代码生成多边形

WPF Windows应用程序。

我的问题:

无法打开生成的多边形成 “可点击项目”。迄今所采取

步骤:

我的第一个方法是使用VE的活动连接管道,这样做无非就是“看”超募的3D地球仪控制的所有事件并返回所有内容的列表存在于点击位置。虽然它有效,但每次点击鼠标时我都会得到一个完美的偏移量,使得这种方法现在无用。

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

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"); 
    } 

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

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

-有关如何解决这个问题的想法?

感谢您的阅读和与此事有关的时间!

PS:如果有人知道一个更好的方式将事件附加到Virtual Earth的多边形,我所有的耳朵=)

+0

使用snoop来查看Click事件是否被触发,如果是,则由可视树中的某些控件处理。 –

+0

@RFLG,做MouseEtner/MouseLeave的工作? – 2011-11-23 23:37:28

+0

@开王:你能详细谈谈'史努比'的情况吗? – RFLG

回答

0

我没有看到实际调用CheckIfClicked的代码,在原岗位这样做在OnMouseUp覆盖中。你的应用程序中有没有在你的问题中列出的类似代码?

+0

嗯,有点......因为我没有事件可以在WPF上重写(或者至少我不能找到它),所以我把这个检查勾上了Globe Control的OnClick事件。不知道这是否正确 – RFLG