如何在WPF ListView中获取光标下的Item

Gri*_*ory 11 wpf listview

如何在ListView中获取光标下的项目?

例如,当我移动鼠标光标时,我希望得到一个项目(光标)并将其名称放到状态栏.

实际上我需要在WinForms.NET中使用类似GetItemAt(int x,int y)的方法

谢谢!

UPD:找到了答案.观看下面的扩展方法

mdm*_*m20 13

您可以尝试使用VisualTreeHelper.HitTest方法.像这样的东西:

    System.Windows.Point pt = e.GetPosition(this);
    System.Windows.Media.VisualTreeHelper.HitTest(this, pt);
Run Code Online (Sandbox Code Playgroud)


Gri*_*ory 13

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; 
}
Run Code Online (Sandbox Code Playgroud)

  • 大家好,阅读一些关于C#扩展方法的文章或书籍.基础知识非常重要.如果要更多地讨论这个问题 - 你必须将此方法放在静态类中. (2认同)