Comment empêcher les clics de passer d’un contrôle à celui situé en dessous

J’ai une zone de texte dans une zone de groupe, les deux avec des événements double-clic. Lorsque je double-clique dans la zone de texte, les deux événements sont déclenchés.

Comment puis-je empêcher les clics dans la zone de texte de se transmettre à la zone de groupe? J’ai essayé de mettre “e.Handled = true;” à la fin de l’événement textbox_DoubleClick, mais cela ne fait aucune différence.

Parce que WPF utilise un modèle de propagation d’événements «tunneling / bubbling», la plupart des événements commencent à bouillonner à partir du bas de l’arborescence visuelle. Si vous souhaitez intercepter un événement à la baisse , il existe des versions de Preview des événements qui sont acheminées vers le bas. Par exemple:

PreviewMouseDoubleClick

Définissez e.Handled = true ici.

Dans l’événement DoubleClick de votre GroupBox, vous pouvez vérifier la valeur de e.OriginalSource et si cette valeur n’est pas la GroupBox , ignorez l’événement.

 private void TabItem_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (e.OriginalSource is GroupBox) { // Your code here } } 

Je pense que les événements ClickEvents sont en fait des événements directs et non des événements tunnelés / masqués, donc le réglage de e.Handled dans l’un n’annulera pas l’autre.

Par site MSDN pour MouseDoubleClick

Bien que cet événement routé semble suivre un itinéraire en ébullition via une arborescence d’éléments, il s’agit en réalité d’un événement routé direct qui est déclenché le long de l’arborescence des éléments par chaque UIElement.

vous devez gérer e.Handled dans PreviewDoubleClick car les événements en tunnel ont lieu avant ceux qui ont été bouillonnés.

aussi pourquoi auriez-vous besoin de gérer cet événement à la fois dans textbox et groupbox? car il est déclenché dans les deux cas, car deux événements distincts sont déclenchés.