2009-07-07 7 views
6

Dans mon application WPF, j'ai une vue arborescente. Cette arborescence est liée à une classe personnalisée (c'est-à-dire et non TreeviewItems). J'utilise donc un hiérarchiqueDataTemplate pour contrôler le rendu de l'arborescence.Dans WPF, comment obtenir l'objet de données associé à l'élément arborescence sous le curseur de la souris?

Lorsque ma souris est sur un élément de vue arborescente, je souhaite obtenir l'objet de données (c'est-à-dire mon instance de classe personnalisée) associé à l'élément de vue arborescente. Comment puis-je faire cela?

Pour clarifier - J'ai besoin de l'objet de données (pas l'UIElement) sous le curseur de la souris.

Supposons que ma méthode pour récupérer l'objet de données a la signature suivante:

private object GetObjectDataFromPoint(ItemsControl source, Point point) 
{ 
    ... 
} 

Répondre

5

Quelque chose comme ça (non testé):

private object GetObjectDataFromPoint(ItemsControl source, Point point) 
{ 
    //translate screen point to be relative to ItemsControl 
    point = _itemsControl.TranslatePoint(point); 
    //find the item at that point 
    var item = _itemsControl.InputHitTest(point) as FrameworkElement; 

    return item.DataContext; 
} 
+0

fantastique, c'est exactement ce que je cherchais. merci Kent! – willem

2
private object GetObjectDataFromPoint(ItemsControl source, Point point) 
{  
    //translate screen point to be relative to ItemsControl  
    point = source.TranslatePoint(point, source);  

    //find the item at that point  
    var item = source.InputHitTest(point) as FrameworkElement; 

    return item.DataContext; 
} 
Questions connexes