c# - WPF - Canvas_MouseLeftButtonDown 事件

标签 c# wpf canvas

问候

我昨天开始使用 WPF 进行开发,但遇到了一些问题。我开始理解 Canvas 相当于 WinForms 中的 Panel。但是,我在“点击”事件中遇到了一些困难。 MouseLeftButtonDown 事件。无论是否相关,此图像和 Canvas 都在 UserControl 中

Image + 3 Canvasses

上面的图片基本上是我遇到的困难。您看到的 3 个图像是一个图像。你看到的方 block 是不同的 Canvas 。根据点击的 Canvas ,我希望发生不同的事情。

目前我有以下代码:

<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>

当我运行应用程序(用户控件当然在主窗口中)并单击 Canvas 应该没有的位置时,什么也没有发生。我试图触发的事件:

 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 的新手,所以如果您认为有比我目前正在尝试的更好的方法,请务必说出来!

提前致谢。

最佳答案

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

如果您为 Canvas 设置 Background=White 或 Red,则它应该获得 MouseLeftButtonDown。

关于c# - WPF - Canvas_MouseLeftButtonDown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354134/

相关文章:

c# - 从数组中检索正确的 PictureBox 图像

c# - MarkupExtension.ProvideValue——是否实际使用了 IServiceProvider?

wpf - 设置 DependencyProperty 值时,是在强制转换之前还是之后调用验证?

wpf - 我可以让 WPF 样式优先于本地值吗?

c# - 项目中图像文件的路径

c# - 缓存包含数据,但无法检索数据

c# - 增加 Angular 2+ 和 ASP.NET Core WebAPI 应用程序中的超时

android - canvas.drawBitmap() 在平铺位图时第一次绘制位图需要更多时间

javascript - HTML/Canvas - 使用另一个 Canvas 绘制图像性能

java - 用多种颜色绘制路径