如果我的鼠标位于特定类型的对象上,我需要检测(真或假)。许多对象使用一个数据模板。我不需要对象实例中的任何内容,我只需要检测我的鼠标是否在 UI 上的此类元素上方。
这将是这样的:
If(mouse.DirectlyOver == StorageElementWrapper)
{
...
}
编辑:我的错误是我像变量一样使用我的类型
如果我的鼠标位于特定类型的对象上,我需要检测(真或假)。许多对象使用一个数据模板。我不需要对象实例中的任何内容,我只需要检测我的鼠标是否在 UI 上的此类元素上方。
这将是这样的:
If(mouse.DirectlyOver == StorageElementWrapper)
{
...
}
编辑:我的错误是我像变量一样使用我的类型
重要的是要注意,DirectlyOver
很可能会在您的元素中找到某些东西,而不是您实际正在寻找的元素。要使用此属性,您需要查看DirectlyOver
元素的父树。FindAncestorOrSelf
来自此博客文章的内容如下:
if (Util.FindAncestorOrSelf<StorageElementWrapper>((DependencyObject)mouse.DirectlyOver) != null)
{
...
}
或者,如果您有对StorageElementWrapper
s 的代码引用(在此示例中,在名为 的集合中myWrappers
)并且它们派生自,则使用以下属性UIElement
可能是更好的方法:IsMouseOver
if (myWrappers.Any(x => x.IsMouseOver))
// do something
我能够将 MouseEnter 事件放在我的数据模板的边框中。此模板绑定到我的对象。而不是在执行操作之前尝试确定鼠标是否悬停在对象上,而是
object_MouseEnter(object sender, MouseEventArgs e)
{
if(....)
else
}
每次“鼠标输入”对象时都会触发事件,我使用条件语句来决定如何处理该事件。
感谢您之前关于鼠标事件的建议。
如果您对特定项目感兴趣,则为一个概念:OnMouseOver
为该特定对象创建一个处理程序(或者OnMouseEnter
)。通常在 WPF 中,事情以这种事件处理方式工作,而不是强制枚举和发现鼠标指针在哪里。所以这种方式项目本身可以告诉你鼠标是否在它上面。该项目可以有一个公开的公共readonly
属性,并且您的代码可以获取该属性的值。