【发布时间】:2019-03-29 01:12:16
【问题描述】:
如何在 ListView 中获取光标下的项目?
例如,当我移动鼠标光标时,我希望在它(光标)下获取一个项目并将其名称放在状态栏上。
实际上我需要 WinForms.NET 中的 GetItemAt(int x,int y) 之类的方法
谢谢!
UPD:已找到答案。观看下面的扩展方法
【问题讨论】:
如何在 ListView 中获取光标下的项目?
例如,当我移动鼠标光标时,我希望在它(光标)下获取一个项目并将其名称放在状态栏上。
实际上我需要 WinForms.NET 中的 GetItemAt(int x,int y) 之类的方法
谢谢!
UPD:已找到答案。观看下面的扩展方法
【问题讨论】:
您可以尝试使用 VisualTreeHelper.HitTest 方法。像这样的:
System.Windows.Point pt = e.GetPosition(this);
System.Windows.Media.VisualTreeHelper.HitTest(this, pt);
【讨论】:
public static object GetObjectAtPoint<ItemContainer>(this ItemsControl control, Point p)
where ItemContainer : DependencyObject
{
// ItemContainer - can be ListViewItem, or TreeViewItem and so on(depends on control)
ItemContainer obj = GetContainerAtPoint<ItemContainer>(control, p);
if (obj == null)
return null;
return control.ItemContainerGenerator.ItemFromContainer(obj);
}
public static ItemContainer GetContainerAtPoint<ItemContainer>(this ItemsControl control, Point p)
where ItemContainer : DependencyObject
{
HitTestResult result = VisualTreeHelper.HitTest(control, p);
DependencyObject obj = result.VisualHit;
while (VisualTreeHelper.GetParent(obj) != null && !(obj is ItemContainer))
{
obj = VisualTreeHelper.GetParent(obj);
}
// Will return null if not found
return obj as ItemContainer;
}
【讨论】: