2009-08-24 8 views
3

Mon DataTemplate ressemble à ceci:Comment faire pour attraper la souris à gauche si le modèle de données a un arrière-plan transparent?

<DataTemplate x:Key="ItemTemplate"> 
<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"> 

Cependant je ne peux pas attraper le bouton gauche de la souris vers le bas. Si je mets l'arrière-plan du modèle à une couleur, c'est ok.

Comment créer un transparent et attraper l'événement MouseLefButtonDown?

Merci.

+0

Techniquement, votre StackPanel est transparent, mais vous avez fait de fond défini comme nul. Ceci est différent de la définition de Background = "Transparent", ce qui donnera le même aspect mais votre StackPanel recevra les événements de la souris. – CodeNaked

Répondre

1

MouseLeftButtonDown est un événement bouillonnant. Cela signifie qu'il se déclenche d'abord au niveau le plus profond possible, puis "bulles" vers le haut à travers l'arbre logique. Si vous avez du contenu contenu dans votre StackPanel qui gère MouseLeftButtonDown, alors vous ne verrez jamais la bulle d'événement vers le haut, et donc il n'atteindra jamais votre StackPanel.

PreviewMouseLeftButtonDown, d'autre part, est un événement de tunnel. Cela signifie qu'il se déclenchera d'abord sur le conteneur de niveau supérieur, puis "tunnel" vers le bas à travers l'arborescence logique jusqu'à ce qu'il atteigne le niveau le plus bas. Essayez de changer votre événement pour:

<StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown"> 

Et voyez si vous pouvez l'attraper alors.

2

Si vous voulez attraper les événements de la souris sur le StackPanel lui-même il vous suffit de mettre sa brosse d'arrière-plan transparent:

<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown" 
     Background="Transparent" Height="400" Width="400" > 
<Button Content="dfsdf"/> 

+0

Eh bien c'est mon problème. Si l'arrière-plan est Transparetn, je ne peux pas recevoir d'événement. S'il est défini sur Noir, Blanc, etc Je peux recevoir l'événement MouseLeftButtonDown. Pour mieux expliquer, j'ai besoin d'avoir un élément de boîte de liste avec l'arrière-plan transaprent que je suis capable de faire glisser par la souris. Par conséquent, j'ai besoin de recevoir MouseLeftButtonDown et commencer l'opération glisser. –