【问题标题】:Click event on canvas with background带背景的画布上的单击事件
【发布时间】:2013-10-20 02:39:14
【问题描述】:

我有 UserControl,其中包含 Canvas(在网格中)。
当我刚刚单击画布事件 PreviewMouseLeftButtonDown 或 MouseLeftButtonDown 时效果很好,但是当我设置 canvas.Background = new ImageBrush(imgs); 并尝试单击画布时,事件不会引发。我尝试为网格(画布父级)制作相同的事件,但结果是一样的。

UPD1:画布有子项 - 光标周围的矩形(来自 System.Windows.Shapes),也许它会以某种方式影响事件。

【问题讨论】:

  • 欢迎来到 StackOverflow。和customary on this website一样,请向我们展示您使用的代码,以帮助我们全面了解您的问题并为您找到解决方案。

标签: wpf wpf-controls mouseevent


【解决方案1】:

在 wpf 中,有两种可能的情况是命中测试(用鼠标单击某处)不起作用。这两个是这样的,这是设计使然。我说的是当您的 Background 为 NULL 或将属性 IsHitTestVisible 设置为 false 时。

在任何其他情况下,点击测试/点击都可以工作。

我假设您的背景以某种方式为空。也许 imgs 会抛出错误,该错误将在渲染时被内部的空 try/catch 块捕获。

告诉我们你的画布的背景属性是否为空?

有一个名为 Snoop 的好工具,它允许您窥探 wpf 应用程序并在运行时更改属性。使用该工具更改背景并告诉我们结果。

编辑:

首先,Canvas Background 的默认值为 null,因此默认情况下,您可以在 Canvas 上随意点击,不会发生任何事情。

一旦您将背景更改为黄色,点击就会起作用,并且您的处理程序将被调用。

【讨论】:

  • IsHitTestVisible 设置为“true” 当我开始程序时,画布背景为空,关于鼠标单击的事件是葡萄干,但是当我将一些图像设置为背景并开始在光标事件周围绘制矩形时不会再养。关于 Snoop:是的,我知道,但是当我选择我的应用程序并按下“Snoop”按钮时,没有任何反应。
  • 我编辑了我的答案。默认情况下,Canvas 不会抛出任何点击事件或 MouseLeftButtonDown 事件
  • 谢谢,我不小心编辑了错误的帖子,对此深表歉意。我找到了一个决定:我刚刚像这样添加到矩形对象事件 MouseLeftButtonDown:r.MouseLeftButtonDown += MouseLeftButtonDown; 现在一切正常。
猜你喜欢
  • 1970-01-01
  • 2011-05-08
  • 2016-03-15
  • 2018-10-26
  • 2013-09-24
  • 2019-04-27
  • 2014-05-22
  • 2015-06-21
  • 2012-04-06
相关资源
最近更新 更多