我基于集合将多个Path对象绘制到WPF画布。我想要一个弹出窗口显示集合中的特定项目的一些信息鼠标在路径上。但是,我不确定如何跟踪触发事件的路径(使用发送方仅提供有关路径的信息,而不是提取它的集合的信息)。目前我有这个:
添加形状&事件:
For (int i = 0; i < Collection.Count ; i++)
{
Path p = new Path();
p.MouseEnter += P_MouseEnter;
...
TrackerCanvas.Children.Add(p);
}
以及之后,为所有人共享的事件:
private void P_MouseEnter(object sender, MouseEventArgs e)
{
dialogPopUp.IsOpen = true;
//no way of knowing which collection object triggered event
}
首先,我尝试扩展MouseEventHandler来创建一个自定义对象,所以我可以通过委托传递一些信息:
p.MouseEnter += new MyPathMouseEventHandler(i, P_MouseEnter);
但是这不会起作用,因为MouseEventHandler是密封的,而path.MouseEnter需要一个MouseEventHandler。
然后我想,也许我可以扩展Path并创建MyPath,它有一个属性&#34; IndexOfPath&#34;或者我可以从发件人那里引用的其他一些有用的信息。像这样:
MyPath path = (MyPath)sender;
MyItem = Collection[path.IndexOfPath];
但是,路径是密封的......所以它已经不在窗外了。
有谁知道我怎么能这样做?
答案 0 :(得分:0)
如果有人绊倒了这个。最后,最简单的(不一定是最好的?)方法是设置路径&#34;标记&#34;创建时关联对象实例的属性。从那时起,可以通过事件源通过任何事件访问它。