2010-09-24 18 views
10

¿Cómo obtener el elemento bajo el cursor en ListView?Cómo obtener el elemento bajo el cursor en WPF ListView

Por ejemplo, cuando muevo el cursor del mouse, deseo obtener un elemento debajo de él (cursor) y poner su nombre a la barra de estado.

En realidad lo que necesito como método GetItemAt (int x, int y) en WinForms.NET

Gracias!

UPD: La respuesta fue encontrada. Mire el método de extensión debajo de

Respuesta

13

Puede intentar usar el método VisualTreeHelper.HitTest. Algo como esto:

System.Windows.Point pt = e.GetPosition(this); 
    System.Windows.Media.VisualTreeHelper.HitTest(this, pt); 
+0

Gracias! Usando su código hice un pequeño método de extensión. Espero que alguien lo encuentre útil – Grigory

12
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

Hola Grigory, por favor ayuda, quiero hacer exactamente lo que hiciste, pero cuando pegué las dos funciones obtuve este error: "El método de extensión debe definirse de forma no genérica" ​​ – YMELS

+2

Hola , lea algunos artículos o un libro sobre métodos de extensión en C#. Los fundamentos son bastante importantes. Si quiere saber más sobre este tema, debe colocar este método en una clase estática. – Grigory

Cuestiones relacionadas