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

问题描述 投票:1回答:3

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

这将是:

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

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

c# wpf mouseevent
3个回答
3
投票

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

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

或者如果你有StorageElementWrappers的代码引用(在这个例子中,在一个名为myWrappers的集合中)并且它们派生自UIElement,这可能是一个更好的方法,使用IsMouseOver属性:

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

2
投票

我能够将MouseEnter事件放在我的数据模板的边框中。此模板绑定到我的对象。在执行动作之前,不是试图确定鼠标是否悬停在对象上

object_MouseEnter(object sender, MouseEventArgs e) 
{
     if(....)
     else
}

每当一个对象被“鼠标输入”时触发事件,我使用条件语句来决定如何处理事件。

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.