如何从类中引发和捕获鼠标事件(不从控件继承)
本文关键字:事件 鼠标 控件 继承 | 更新日期: 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覆盖中完成的。你有没有类似的代码在你的应用程序的某个地方,没有在你的问题中列出?