2009-06-03 2 views
0

j'appris sur les événements routés dans WPF et j'essaye l'exemple suivant,LeftMouseButtonDown ne fonctionne pas avec des boutons dans les événements routés

Fichier - Window1.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <UniformGrid MouseDown="UniformGrid_MouseDown"> 
     <Button x:Name="Button1">1</Button> 
     <Button x:Name="Button2">2</Button> 
     <Button x:Name="Button3">3</Button> 
     <Button x:Name="Button4">4</Button> 
     <Button x:Name="Button5">5</Button> 
     <Button x:Name="Button6">6</Button> 
     <Button x:Name="Button7">7</Button> 
     <Button x:Name="Button8">8</Button> 
     <Button x:Name="Button9">9</Button> 
    </UniformGrid> 
</ScrollViewer> 

Fichier - Window1.xaml .cs

private void UniformGrid_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    Button aTargetButton = e.Source as Button; 
    if (aTargetButton != null) 
    { 
     aTargetButton.Background = Brushes.Azure; 
     aTargetButton.LayoutTransform = new RotateTransform(45); 
     if (myPreviouslyClickedButton != null) 
     { 
      myPreviouslyClickedButton.Background = Brushes.White; 
      myPreviouslyClickedButton.LayoutTransform = new RotateTransform(0); 
     } 
     myPreviouslyClickedButton = aTargetButton; 
    } 
} 

lorsque j'ai couru ces extraits, le bouton correspondant subit une transformation angulaire que quand je fais un clic droit dessus (même si je suis abonné pour MouseDown). Pouvez-vous m'aider avec ça?

Mise à jour:

Cet extrait semble fonctionner si je remplace le bouton avec une ellipse. Pourquoi le bouton ne peut-il pas réagir aux clics gauches lorsqu'une ellipse le peut? Aussi les événements ne sont pas augmentés si je clique sur la même ellipse plus d'une fois

Répondre

0

Cela fonctionne correctement. En interne, le Button gère l'événement MouseDown pour savoir quand déclencher son événement Click. J'ai trouvé que Snoop est un excellent outil pour dépister des problèmes avec des événements de WPF, ou juste pour obtenir une meilleure compréhension de leur fonctionnement.

1

Votre événement de souris vers le bas est géré par le bouton.

Si vous voulez que votre grille pour gérer les événements de bouton, alors vous pourriez faire quelque chose comme:

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <UniformGrid Button.Click="UniformGrid_Click"> 
     <Button x:Name="Button1" Margin="10">1</Button> 
     <Button x:Name="Button2">2</Button> 
     <Button x:Name="Button3">3</Button> 
     <Button x:Name="Button4">4</Button> 
     <Button x:Name="Button5">5</Button> 
     <Button x:Name="Button6">6</Button> 
     <Button x:Name="Button7">7</Button> 
     <Button x:Name="Button8">8</Button> 
     <Button x:Name="Button9">9</Button> 
    </UniformGrid> 
    </ScrollViewer> 

et changer la source à quelque chose comme:

private void UniformGrid_Click(object sender, RoutedEventArgs e) 
    { 
     // Your code here 
    } 

Il y a un article msdn here que Cela vaudrait le coup d'être lu.

Questions connexes