鼠标按下事件在Canvas控件中不会冒泡

时间:2013-05-25 11:13:59

标签: wpf canvas event-handling

我的WPF项目中有一个画布控件:

<Canvas x:Name="mainCanvas" Margin="0" 
        MouseMove="mainCanvas_MouseMove"     
        MouseLeftButtonDown="mainCanvas_MouseLeftButtonDown"/>

在这个画布控件中,还有一些其他Canvas控件作为子画面。

问题是,当我单击这些子画布控件时,不会调用mainCanvas_MouseLeftButtonDown回调。我没有将这些儿童画布的鼠标事件绑定任何东西。

mainCanvas_MouseMove回调似乎工作正常,即使我将鼠标悬停在子画布上也会调用它。

我试着预测鼠标按下事件而没有运气。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

事件没有冒泡,因为视觉树上有人处理了它们。

您应该使用snoop来查看处理事件的人

否则只需将子画布注册到eventHandlers

即可
public override Canvas CreateCanvas()
{
  Canvas canvas = new Canvas();

  canvas.MouseMove +=new MouseEventHandler(mainCanvas_MouseMove);
  canvas .MouseLeftButtonDown +=new MouseButtonEventHandler(mainCanvas_MouseLeftButtonDown);

 // your code here
}

当你摧毁你的孩子时,画布不要忘记取消注册事件。