Как получить элемент под курсором в WPF ListView - PullRequest
11 голосов
/ 24 сентября 2010

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

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

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

Спасибо!

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

Ответы [ 2 ]

13 голосов
/ 28 сентября 2010
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; 
}
13 голосов
/ 25 сентября 2010

Вы можете попробовать использовать метод VisualTreeHelper.HitTest.Как то так:

    System.Windows.Point pt = e.GetPosition(this);
    System.Windows.Media.VisualTreeHelper.HitTest(this, pt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...