问候
我昨天开始使用WPF开发并遇到了一些问题。我发现Canvas相当于WinForms中的Panel。但是我遇到了“点击”事件的一些困难。 MouseLeftButtonDown事件。如果它是否相关,则此Image和Canvasses位于UserControl
中
上面的图片基本上就是我遇到的困难。您看到的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的新手,所以如果你认为有一种比我目前更好的方法,请说出来!
提前致谢。
答案 0 :(得分:4)
实际问题是画布是透明的。因此,所有事件都不会在画布处停止,但会为其父元素生成它们。
如果为画布设置背景=白色或红色,则应该获得MouseLeftButtonDown。
答案 1 :(得分:3)
你的图片会隐藏画布,因此在声明图像后,XAML会声明画布,因此在UI中它们将位于画面前面,并且Click将生效。
提示:仅提供画布背景颜色以查看它们在UI中的呈现方式。当你这样做时,你可以看到图像隐藏它们。