12

我有一些 xaml 标记,基本上看起来像这样:

<Canvas x:Name="A">
     <Canvas x:Name="B"/>
</Canvas>

我想确定鼠标是否在CanvasB上。

当我在鼠标悬停在 Canvas B 上时单击时,Mouse.DirectlyOver 返回 Canvas A(如我所料)。然后我从 Canvas A 获得对 Canvas B 的引用,但是当我检查 Canvas B 的 IsMouseOver 属性时,它返回 false。

鉴于上面的 xaml,确定鼠标是否在 Canvas B 上的最佳方法是什么?

4

2 回答 2

36

您可以使用IsMouseOver 属性来确定鼠标是否在给定控件上:

if(this.B.IsMouseOver)
    DoSomethingNice();

虽然Mouse.DirectlyOver可以工作,但如果鼠标悬停在 包含的控件上Canvas,则将返回该控件而不是返回控件Canvas本身。IsMouseOver即使在这种情况下也能正常工作。

于 2013-02-21T13:14:50.737 回答
4

我在这里找到了一个可以帮助你的答案:StackOverflow: WPF Ways to find controls

仅供参考:

我只是在寻找一种方法来确定我的鼠标是否在我的应用程序窗口上,并且我成功地使用以下方法找到了这一点:

if (Mouse.DirectlyOver != null)
    DoSomethingNice();

在调试 Mouse.DirectlyOver 时,它似乎应该找到您的 Canvas B,因为它会查找最顶层的元素 - 所以您的示例应该可以工作。它没有给我一个依赖对象,但我想你可以使用这是代码隐藏(未经测试)将它与你的画布进行比较:

if (Mouse.DirectlyOver == this.B)
    DoSomethingNice();
于 2012-02-01T09:58:23.630 回答