代码之家  ›  专栏  ›  技术社区  ›  Grigory

如何在wpflistview中获取光标下的项

  •  11
  • Grigory  · 技术社区  · 14 年前

    例如,当我移动鼠标光标时,我希望在它下面得到一个项目(光标)并将其名称放入statusbar。

    实际上,我需要像GetItemAt(intx,inty)这样的方法WinForms.NET

    谢谢!

    找到了答案。观察下面的扩展方法

    2 回复  |  直到 14 年前
        1
  •  14
  •   mdm20    14 年前

    你可以试着用VisualTreeHelper.HitTest测试方法。像这样:

        System.Windows.Point pt = e.GetPosition(this);
        System.Windows.Media.VisualTreeHelper.HitTest(this, pt);
    
        2
  •  13
  •   Community kfsone    7 年前
    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; 
    }