2010-12-04 101 views
3

问候WPF - Canvas_MouseLeftButtonDown事件

我从昨天开始用WPF开发并遇到了一些问题。我认识到Canvas等同于WinForms中的面板。但是,我遇到了一些'点击'事件的困难。 MouseLeftButtonDown事件。如果是相关与否,这个形象与画布是在用户控件

Image + 3 Canvasses

上面的影像基本上就是我有困难。你看到的3幅图像是一幅图像。你看到的广场是不同的画布。根据点击的画布,我希望发生不同的事情。

目前,我有以下代码:

<Grid> 
    <Canvas Name="canvasTerran" Height="27" Width="26" Margin="88,106,134,106" MouseLeftButtonDown="canvasTerran_MouseLeftButtonDown" /> 
    <Canvas Name="canvasZerg" Height="27" Width="26" Margin="117,107,105,107" MouseLeftButtonDown="canvasZerg_MouseLeftButtonDown" /> 
    <Canvas Name="canvasProtoss" Height="27" Margin="145,107,88,107" MouseLeftButtonDown="canvasProtoss_MouseLeftButtonDown" /> 
    <Image Name="imageRaces" Height="27" Width="73" Stretch="Fill" Source="pack://application:,,,/Images/Races/Races.png" /> 
</Grid> 

当我运行应用程序(用户控件是在主窗口中ofcourse)和我点击在画布应该是什么也没有发生。我试图触发的事件:

private void canvasTerran_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("lolterran", "lol"); 

      // image on main window 
      // .Source = new BitmapImage(new Uri("pack://application:,,,/" + Constants.RACESPATH + "T.png")); 
     } 

我真的不明白我在做什么错误,所以任何建议都会受到欢迎。正如我所说我是WPF的新手,所以如果你认为有比我现在尝试更好的方式,请说出口!

在此先感谢。

回答

4

的实际问题是,画布是透明的。因此,所有事件都不会在画布上停止,但是它们是为其父元素生成的。

如果设置背景=白色或红色例如用于画布,它应该得到的MouseLeftButtonDown。

3

你的图片隐藏画布所以在XAML声明后的图像,所以在UI他们将在它的前面和的点击生效申报画布。

提示:给画布背景颜色只是为了看看他们是如何使自己的UI。当你这样做时,你可以看到图像隐藏它们。

+0

对我来说它的工作 – Erez 2010-12-04 15:25:07

+1

你是正确的,它的工作。我所要做的只是将透视图放在Canvas上,否则单击它们将不起作用,因为它们没有填充颜色。该提示帮助我很多谢谢你! – Citroenfris 2010-12-04 15:29:26