How to get Item under cursor in WPF ListView

前端 未结 2 1152
南笙
南笙 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(this ItemsControl control, Point p)
    where ItemContainer : DependencyObject
    {
        // ItemContainer - can be ListViewItem, or TreeViewItem and so on(depends on control)
        ItemContainer obj = GetContainerAtPoint(control, p);
        if (obj == null)
            return null;
    
        return control.ItemContainerGenerator.ItemFromContainer(obj);
    }
    
    public static ItemContainer GetContainerAtPoint(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; 
    }
    

提交回复
热议问题