WPF-确定鼠标是否位于UIF元素上

WPF-确定鼠标是否位于UIF元素上,wpf,mouse,uielement,Wpf,Mouse,Uielement,我有一些xaml标记,基本上如下所示: <Canvas x:Name="A"> <Canvas x:Name="B"/> </Canvas> 我想确定鼠标是否在画布上 当我在画布B上单击鼠标时,mouse.DirectlyOver返回画布A(正如我所期望的)。然后,我从画布a获取对画布B的引用,但当我检查画布B的IsMouseOver属性时,它返回false 考虑到上面的xaml,确定鼠标是否位于画布B上的最佳方法是什么?我在这里找到了一个答案

我有一些xaml标记,基本上如下所示:

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

我想确定鼠标是否在画布上

当我在画布B上单击鼠标时,mouse.DirectlyOver返回画布A(正如我所期望的)。然后,我从画布a获取对画布B的引用,但当我检查画布B的IsMouseOver属性时,它返回false


考虑到上面的xaml,确定鼠标是否位于画布B上的最佳方法是什么?

我在这里找到了一个答案,应该可以帮助您:

仅供参考:

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

if (Mouse.DirectlyOver != null)
    DoSomethingNice();
在调试Mouse.DirectlyOver时,它似乎应该找到画布B,因为它查找最顶层的元素,所以您的示例应该可以工作。它没有给我一个依赖项对象,但我想你可以用下面的代码将它与画布进行比较(未测试):

您可以使用来确定鼠标是否位于给定控件上:

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

虽然可以工作,但如果鼠标位于
画布
包含的控件上,则将返回该控件,而不是
画布
本身<代码>IsMouseOver即使在这种情况下也能正常工作。

您使用什么事件处理来进行检查?如果我在画布B中添加一个MouseUp事件,那么Mouse.DirectlyOver将返回画布B。也许更多的信息将有助于跟踪您的问题。当然。画布实际上位于ListBoxItem的ControlTemplate中。我正在处理listbox的selection changed事件,并执行一个routed事件来显示一个弹出窗口,其中详细显示了有关单击项的信息。我检查鼠标在何处的代码位于路由事件处理程序中。所有这些的目标是在单击列表项的右侧部分时不显示弹出窗口。因此,我试图用画布定义列表项的这一部分,然后在显示弹出窗口之前检查鼠标是否在该部分上。我知道还有其他方法可以做到这一点,但我试图避免使用除selection changed事件之外的其他事件。请注意,在拖放操作期间,您必须手动检测
IsMouseOver
DirectlyOver
,因为在拖放完成之前,鼠标一直被捕获。对于那些不知道的人,可以通过检查鼠标是否在
IsMouseOver
控件的边界内,并使用
visualtreeheloper.HitTest
直接覆盖
来完成。如果我想要在非常大的控件上方的确切位置,该怎么办?
if(this.B.IsMouseOver)
    DoSomethingNice();