tags:

views:

56

answers:

2

How to get Item under cursor in ListView ?

For example when i move mouse cursor, i wish to get an item under it(cursor) and put its name to statusbar.

Actually i need method like GetItemAt(int x,int y) in WinForms.NET

Thanks!

UPD: Answer was found. Watch extension method below

A: 

You can try using the VisualTreeHelper.HitTest method. Something like this:

    System.Windows.Point pt = e.GetPosition(this);
    System.Windows.Media.VisualTreeHelper.HitTest(this, pt);
mdm20
Thanks! Using your code i made a small extension method. I Hope someone will find it useful
Belorus
A: 
public static object GetObjectAtPoint<ItemContainer>(this ItemsControl control, Point p)
                                     where ItemContainer : DependencyObject
    {
        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; 
    }
Belorus