2011-08-11 2 views
0

Ceci est ma première question alors s'il vous plaît allez-y doucement :)WPF une Tunneling Button_Click

Je suis nouveau à WPF et les applications de bureau et je suis en train d'étudier la gestion d'événements. En passant par Bubbling et Tunnelling Je ne trouve aucun exemple qui explique comment utiliser le tunneling sur un Button_Click.

Fondamentalement, lorsque je clique sur un bouton, j'ai besoin du contrôle parent (dans ce cas une grille) pour gérer l'événement en premier et faire quelques vérifications avant d'autoriser le Button_Click à avoir lieu. Le problème que je suis est que je peux utiliser le Grid_PreviewMouseDown pour capturer l'événement mais c'est ambigu! Il ne me dit pas (du moins je pense que ce n'est pas le cas) quel contrôle a provoqué le gestionnaire à déclencher. Que puis-je faire pour déterminer le PreviewMouseDown a été déclenchée par un clic de bouton?

Ou: Y at-il une alternative/mieux était de tunnel un Button_Click?

Merci

Répondre

1

Dans votre gestionnaire, vous devez inspecter le Source de l'événement pour obtenir le contrôle qui a initié il. Notez simplement qu'il n'est pas en lecture seule et qu'il peut être modifié de sorte que le Source fait référence à un contrôle différent.

Vous aurez probablement plus de chance de vous inscrire à l'événement PreviewMouseLeftButtonDown pour obtenir des clics gauche et non n'importe quel clic.

Si votre gestionnaire est censé ne rechercher le clic gauche de la souris, vous pouvez utiliser ce code:

private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Button button = e.Source as Button; 
    if (button != null) 
    { 
     // button is being clicked, handle it 
    } 
} 
+0

Notez également que 'MouseDown' n'est pas un clic approprié ... –

+0

Dans le code: Comment Je vérifie la source est un bouton? Jeter? –

+0

@Mrs: Cela dépend de votre situation. Si votre gestionnaire sera dédié à gérer les clics sur les boutons, alors le code dans ma mise à jour serait bien. Sinon, si votre gestionnaire gère d'autres clics de contrôle, il peut être plus facile de vérifier en utilisant 'is'. –

Questions connexes