WPF - 确定鼠标是否超过UIElement

时间:2010-12-03 16:26:53

标签: wpf mouse uielement

我有一些看起来像这样的xaml标记:

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

我想确定鼠标是否超过Canvas B。

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

在给定上面的xaml的情况下,确定鼠标是否在Canvas B上的最佳方法是什么?

2 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:3)

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

仅供参考:

我正在寻找一种方法来查明我的鼠标是否完全位于我的应用程序窗口之外,并且我使用以下方法成功找到了这个:

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

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

if (Mouse.DirectlyOver == this.B)
    DoSomethingNice();