2010-02-25 2 views
1

Dans le modèle, j'ai une collection d'objets observables. Avec un ItemsControl (et UserControl) je montre ces éléments (formes).XAML hittesting

Maintenant, je veux faire hittesting sur le canevas parent.

Par exemple, lorsque j'exécute ce code:

HitTestResult result = VisualTreeHelper.HitTest(allContent, new Point(70, 340)); 

je reçois un HitTestResult, mais je veux faire l'objet dans le modèle représentant cette forme « cliqué ».

Y a-t-il une possibilité d'obtenir l'objet?

Répondre

2

Pour accéder à la DataContext qui est lié à la ListBoxItem en question, je fais ceci:

HitTestResult result = VisualTreeHelper.HitTest(itemsContainer, position) ; 
FrameworkElement currentElement = result.VisualHit as FrameworkElement ; 

while((currentElement is ListBoxItem)==false 
    && currentElement!=itemsControlElement 
    && currentElement!=null) 
{ 
    currentElement = VisualTreeHelper.GetParent(currentElement) as FrameworkElement ; 
} 

if(currentElement != null) 
{ 
    object dataSource = currentElement.DataContext ; 
} 

Si vous passez la marche de la pile de chercher votre UserControl au lieu d'un ListBoxItem et changer le itemsControlElement être Quel que soit votre conteneur ItemsControl, il devrait empêcher les promenades fugitives de l'arborescence visuelle.