在WPF中,如何在Canvas上捕获鼠标并仍然找到光标悬停在哪些控件上?

时间:2010-11-20 22:20:30

标签: c# wpf mouse

我有一个自定义的Canvas控件(继承自Canvas)覆盖在大面积的用户控件上。想法是在用户控件(即连接线)之间绘制路径。

要捕获鼠标移动,我在MouseDown上调用Mouse.Capture(theCanvas)。这很好用,但画布下的用户控件显然不再接收鼠标事件。 Mouse.DirectlyOver总是显示画布,所以我不能通过窥视当前位置并查看哪个用户控制它来完全伪造它。

所以,我仍然需要画布来绘制路径,但我怎样才能解决以下方法之一:

  1. 在Canvas下偷看,看看它下面最顶层的控件是什么?
  2. 获取此MouseDown - > Track MouseMoves - > MouseUp工作流在没有鼠标捕获的情况下在画布上工作?
  3. 欢迎任何其他想法......

1 个答案:

答案 0 :(得分:0)

我同意这些是你的两个选择。如果您只想将一些点击转发给您的用户控件,那么请使用选项1,然后点击测试画布下的控件。

如果你需要你的用户控件表现得好像什么都没有覆盖它们(文本框,按钮等),那么我建议在用户控件的父级上使用PreviewMouseMove事件,因为这可以选择并且可选控件到达事件之前“处理”事件,但如果未将handle设置为true,则不会阻止事件