WPF - Canvas_MouseLeftButtonDown事件

时间:2010-12-04 15:06:26

标签: c# wpf canvas

问候

我昨天开始使用WPF开发并遇到了一些问题。我发现Canvas相当于WinForms中的Panel。但是我遇到了“点击”事件的一些困难。 MouseLeftButtonDown事件。如果它是否相关,则此Image和Canvasses位于UserControl

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>

当我运行应用程序时(用户控件在主窗口中),我点击画布应该没有任何反应。我正试图解雇的事件:

 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的新手,所以如果你认为有一种比我目前更好的方法,请说出来!

提前致谢。

2 个答案:

答案 0 :(得分:4)

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

如果为画布设置背景=白色或红色,则应该获得MouseLeftButtonDown。

答案 1 :(得分:3)

你的图片会隐藏画布,因此在声明图像后,XAML会声明画布,因此在UI中它们将位于画面前面,并且Click将生效。

提示:仅提供画布背景颜色以查看它们在UI中的呈现方式。当你这样做时,你可以看到图像隐藏它们。