Как получить элемент под курсором в WPF ListView

Как получить элемент под курсором в ListView?

Например, когда я перемещаю курсор мыши, я хочу получить под ним элемент (курсор) и поместить его имя в строку состояния.

На самом деле мне нужен такой метод, как GetItemAt (int x, int y) в WinForms.NET

Спасибо!

UPD: Ответ был найден. Смотрите метод расширения ниже

Ответ 1

Вы можете попробовать использовать метод VisualTreeHelper.HitTest. Что-то вроде этого:

    System.Windows.Point pt = e.GetPosition(this);
    System.Windows.Media.VisualTreeHelper.HitTest(this, pt);

Ответ 2

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; 
}