1

如果我的鼠标位于特定类型的对象上,我需要检测(真或假)。许多对象使用一个数据模板。我不需要对象实例中的任何内容,我只需要检测我的鼠标是否在 UI 上的此类元素上方。

这将是这样的:

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

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

4

3 回答 3

3

重要的是要注意,DirectlyOver很可能会在您的元素中找到某些东西,而不是您实际正在寻找的元素。要使用此属性,您需要查看DirectlyOver元素的父树。FindAncestorOrSelf来自此博客文章的内容如下:

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

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

if (myWrappers.Any(x => x.IsMouseOver))
    // do something
于 2013-07-11T16:26:21.327 回答
2

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

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

每次“鼠标输入”对象时都会触发事件,我使用条件语句来决定如何处理该事件。

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

于 2013-07-11T18:54:18.683 回答
2

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

于 2013-07-11T16:34:38.133 回答