wpf: cliquez sur bouton de gauche n'est pas reconnu
J'ai récemment dans WPF et quand j'ai appris le matériel, j'ai fait face à d'étranges question.
- Je construire sur un bouton, contenir des couches avec des blocs de texte et je tiens à souligner lorsque l'utilisateur clique sur le bouton lui-même, sur la première, deuxième ou troisième "' (j'ai sortie un message).
Tout fonctionne bien sauf le bouton de pas un événement est déclenché lorsque l'utilisateur clique avec le bouton gauche (juste avec le moyen ou le bouton droit).
donc ma question: Pourquoi j'ai pas reçu une boîte de message lorsque j'appuie sur le bouton lui-même avec le bouton gauche de la souris (et je reçois le msg box avec les autres boutons de la souris) ?
XAML:
<Button Margin="145,152,144,102" Padding="5,5,5,5" HorizontalAlignment="Center" VerticalAlignment="Center" MouseDown="Button_MouseDown" Height="57" Width="214">
<WrapPanel>
<WrapPanel HorizontalAlignment="Center" VerticalAlignment="Center"></WrapPanel>
<TextBlock Foreground="Black" FontSize="24" MouseDown="TextBlockFirst_MouseDown" >First </TextBlock>
<TextBlock Foreground="Red" FontSize="24" MouseDown="TextBlockSecond_MouseDown">Second </TextBlock>
<TextBlock Foreground="Blue" FontSize="24" MouseDown="TextBlockThird_MouseDown" >Third </TextBlock>
</WrapPanel>
</Button>
Code:
private void TextBlockFirst_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on first");
}
private void TextBlockSecond_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on second");
}
private void TextBlockThird_MouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("You click on third");
}
private void Button_MouseDown(object sender, MouseButtonEventArgs e)
{
//This event not working good
//only middle & right mouse buttons are recognized
MessageBox.Show("You click on the button");
}
Merci!
OriginalL'auteur AsfK | 2014-04-13
Vous devez vous connecter pour publier un commentaire.
MouseDown
événement est unbubbling event
laquelle les bulles de son donneur d'ordre à son parent racine. MaisClick
événement mangent leMouseDown
événement et ne permet pas le cas de remontée jusqu'à Bouton.Vous pouvez utiliser
PreviewMouseDown
événement qui est untunnelling event
qui tunnels de la racine à son donneur d'ordre. Si bouton allons d'abord faire de cet événement et puis après textBlock.Consulter le cliché ci-dessous pour la clarté de l'image:
Mise à JOUR
Crochet seulement
PreviewMouseDown
événement sur le bouton et retirez les gestionnaires de l'individu textBlocks. Vérifiere.OrignialSource
pour voir siTextBlock
est réelle source d'origine ou d'un bouton.XAML
PreviewMouseDown
également dans le texte-blocs, j'obtiens deux boîte de message par clic (je veux seulement un msg et le vrai..)Crochet seulement
PreviewMouseDown
événement sur le bouton et pas sur TextBlock et vérifiere.OriginalSource
dans le gestionnaire à voir pour l'initiateur de l'événement.Merci beaucoup !
OriginalL'auteur Rohit Vats
Ça ne fonctionne pas, parce que le premier feu est un événement à la
Button.Click
, et quand il fonctionne, il est en conflit avec les événements comme:MouseLeftButtonDown
,MouseUp
,MouseDown
.Faire a travaillé cet événement, vous devez définir une
PreviewMouseDown
événement, parce que c'est unTunnel
cas, cela signifie qu'il va aller en bas de la VisualTree hiérarchie, donc il est déclenché avant que la Bulle des événements.Aussi, comme alternative, vous pouvez utiliser le
Button.Click
événement de Bouton.OriginalL'auteur Anatoliy Nikolaev