How to get Item under cursor in WPF ListView

前端 未结 2 1140
南笙
南笙 2021-01-11 15:33

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.

Actual

相关标签:
2条回答
  • 2021-01-11 15:52
    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; 
    }
    
    0 讨论(0)
  • 2021-01-11 16:09

    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);
    
    0 讨论(0)
提交回复
热议问题