2011-01-25 3 views
1

Dans une application WPF, j'ai un tas de CustomControls dans une grille. Pour le traitement de clics de souris sur eux, j'utiliser l'événement MouseLeftButtonDown de la grille et dans le gestionnaire d'événements que je vérifie qui CustomControl a été cliqué:WPF FrameworkElement Mouse Cliquez sur le numéro

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     FrameworkElement feSourceComm = e.Source as FrameworkElement; 
     MyCustomControl SCurrentComm = new MyCustomControl();    
     try 
     { 
      SCurrentComm = (MyCustomControl)feSourceComm; 
     } 
     catch (Exception) 
     { 
... 

Le problème est apparu lorsque je place tous CustomControls dans un UserControl puis à l'intérieur de la grille. Dans ce cas, l'approche ne fonctionne pas.
J'ai vérifié le type de clic source dans chaque cas par e.Source.GetType().ToString(); et obtenir les résultats suivants:

Quand il n'y a pas de problème (dans le cas où je mets CustomControls dans la grille sans UserControl)

MyProjectNamespace.MyCustomControl 

quand je mets CustomControls dans le UserControl puis dans la grille

MyProjectNamespace.UserControls.MyUserControlName 

quand je mets CustomControls dans le UserCo ntrol puis dans la grille et charger le UserControl de fichier externe par XamlReader.Load

System.Windows.Controls.UserControl 

Alors, ma question:
Comment faire CustomControls Vizible comme e.Source quand ils sont à l'intérieur d'un UserControl?

Répondre

2

e.OriginalSource vous indiquera l'élément spécifique sur lequel le clic s'est produit. si ce n'est pas votre customcontrol, remonter la chaîne Parent du OriginalSource jusqu'à ce que vous trouviez votre customcontrol

+0

Oui, ça marche. Merci! +1 – rem