【发布时间】:2015-08-26 08:33:46
【问题描述】:
我有一个包含许多项目的 Treeview。每个项目都是显示在另一个控件中的 3D 对象的部件名称。我希望能够将鼠标移到项目上并识别我所在的项目。这样我就可以将项目 ID 传递给可以突出显示该部分的其他控件。
请注意,我已经可以使用 click 事件执行此操作,但我现在需要在没有任何点击的情况下执行此操作。
如何在 TreeView 的 Mousemove 事件中做到这一点?
【问题讨论】:
我有一个包含许多项目的 Treeview。每个项目都是显示在另一个控件中的 3D 对象的部件名称。我希望能够将鼠标移到项目上并识别我所在的项目。这样我就可以将项目 ID 传递给可以突出显示该部分的其他控件。
请注意,我已经可以使用 click 事件执行此操作,但我现在需要在没有任何点击的情况下执行此操作。
如何在 TreeView 的 Mousemove 事件中做到这一点?
【问题讨论】:
您有“System.Windows.Input.Mouse”类,它可以为您提供一些信息,例如DirectlyOver
但它可以返回 UIElement 的顶层,如 TreeviewItSelf。
我认为另一种解决方案可能是递归测试鼠标相对于项目的位置。
使用Mouse.GetPosition(UIELEMENT) 如果位置返回在坐标之一中为负或高于控件大小,这意味着您不在控件的 HitTestRectangle 中。
您也可以使用VisualTreeHelper.FindElementsInHostCoordinates,在您的树视图 (Mouse.GetPosition(TREEVIEW)) 的相对位置使用大小为 1 的矩形,并在第二个参数中给出所有树视图本身。
【讨论】: