【问题标题】:Getting the Logical UIElement under the mouse in WPF在WPF中获取鼠标下的逻辑UIElement
【发布时间】:2013-05-13 15:29:12
【问题描述】:

似乎所有在 Mouse 下检索元素的方式都与 Visual Hit 测试有关。

是否有一些我缺少的机制可以让我获取代表HitTest 返回的当前可视树的实际UIElement

我在做什么的总结:

我有一个自定义工具提示类,它依赖于基于鼠标悬停的 UIElement 执行某些操作。

简单地说,它挂钩到拥有窗口的PreviewMouseMove 事件并更新“当前项目”。此当前项应代表鼠标当前位于其上方的UIElement

不幸的是,我遇到的所有Mouse.DirectlyOverVisualTreeHelper.HitTest(包括回调)都不起作用。

谁能提供有关如何在 Window 的 MouseMove 事件中完成 WPF 中看似简单的任务的见解?

【问题讨论】:

    标签: wpf mouse event-bubbling visualtreehelper ismouseover


    【解决方案1】:

    使用Mouse.DirectlyOver 属性:

    var UIElement = Mouse.DirectlyOver as UIElement;
    

    【讨论】:

    • 这仍然抓住了视觉元素。例如...如果我将鼠标悬停在默认模板的“按钮”上,如果我将鼠标放在文本(内容)上,它将返回给我那个特定的文本块。我基本上希望它返回 Button 而不是单个视觉元素。
    【解决方案2】:

    我不知道任何明确的方式,但想法很简单,

    1) 查找可视化树元素

    2) 测试元素是否存在于逻辑树中,

    3) 如果它存在,那么您已经找到了答案。

    4) 否则您将不得不致电 VisualTreeHelper.GetParent() 并继续算法。

    Ps,LogicalTreeHelper.GetParent(your visual tree element) 也可以。

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多