如何检测鼠标是否直接在WPF中的对象类型上

时间:2013-07-11 16:13:14

标签: c# wpf mouseevent

如果我的鼠标在特定类型的对象上,我需要检测(true或false)。有许多对象使用的数据模板。我不需要来自对象实例的任何东西,我只需要检测我的鼠标是否在UI上的这种类型元素之上。

这将是:

If(mouse.DirectlyOver == StorageElementWrapper)
{
...
}

编辑:我的错误是我正在使用我的类型变量

3 个答案:

答案 0 :(得分:3)

重要的是要注意DirectlyOver很可能会在你的元素中找到一些东西而不是你实际想要的元素。要使用此属性,您需要查看DirectlyOver元素的父树。这些内容与FindAncestorOrSelf来自this blog post

if (Util.FindAncestorOrSelf<StorageElementWrapper>((DependencyObject)mouse.DirectlyOver) != null)
{
...
}

或者,如果您对StorageElementWrapper的代码引用(在此示例中,在名为myWrappers的集合中)并且它们派生自UIElement,则这可能是更好的方法,使用IsMouseOver属性:

if (myWrappers.Any(x => x.IsMouseOver))
    // do something

答案 1 :(得分:2)

如果您对特定项感兴趣,请使用以下概念:为该特定对象创建OnMouseOver处理程序(或者OnMouseEnter)。通常在WPF中,事物处理这种事件处理方式而不是命令性地枚举和发现鼠标指针的位置。所以这样项目本身可以告诉你鼠标是否在它上面。该项目可以有一个公开的readonly属性,可以公开该属性,而您的代码只能获取该属性的值。

答案 2 :(得分:2)

我能够将MouseEnter事件放在数据模板的边框中。此模板绑定到我的对象。

,而不是在执行动作之前尝试确定鼠标是否悬停在对象上
object_MouseEnter(object sender, MouseEventArgs e) 
{
     if(....)
     else
}
每次“鼠标输入”对象时都会触发

事件,我使用条件语句来决定如何处理事件。

感谢您之前关于鼠标事件的建议。