2011-03-11 7 views
1

J'utilise le contrôle NumericUpDown de Silverlight Control Toolkit, qui parfois double l'événement ValueChanging sur une mise à jour (en cliquant une seule fois sur le bouton supérieur ou inférieur). Est-ce que quelqu'un sait tout workarround pour ce comportement?Silverlight NumericUpDown ValueChanging déclenché deux fois


Plus d'infos:
je le XAML suivant:

<StackPanel> 
     <toolkit:NumericUpDown Name="numericUpDown1" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
     <toolkit:NumericUpDown Name="numericUpDown2" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
     <toolkit:NumericUpDown Name="numericUpDown3" 
           Width="35" 
           Minimum="0" 
           Maximum="3" 
           ValueChanging="valueChanging" /> 
    </StackPanel> 

Et le code pour l'événement:

private void valueChanging(object sender, RoutedPropertyChangingEventArgs<double> e) 
    { 
     if (numericUpDown1.Value + numericUpDown2.Value + numericUpDown3.Value > 3) 
     { 
      e.Cancel = true; 
      MessageBox.Show("No more than 3 in total"); 
     } 
    } 

L'erreur ne vient pas tout le temps, mais quelques fois l'événement est tiré deux fois et l'alerte vient même quand je viens d'avoir une somme de 3 ... par exemple (que tout le temps ne se passe pas): augmenter à 2 le premier, puis à 1 le deuxième, et 1 au troisième. un message est montré et c'est correct. diminuez le firt à 1, et si vous augmentez le troisième à 1, le message sera déclenché, car l'événement est déclenché deux fois ... (encore une fois, pas tout le temps que cela se produise)

+0

Je ne peux pas reproduire ce problème, pouvez-vous fournir plus de détails. – AnthonyWJones

+0

Info étendue avec plus d'infos, merci d'avance. – KodiakMx

+0

Merci Anthony pour cette édition ... :) – KodiakMx

Répondre

0

Si vos contrôles NumericUpDown n'ont pas besoin d'aller très haut (comme dans l'exemple que vous avez posté où il n'accepte pas plus une somme supérieure à 3) vous pouvez changer le modèle du contrôle pour utiliser un bouton à la place.

Remarque: J'ai essayé de modifier uniquement le modèle SpinnerStyle mais cela n'a pas fonctionné. J'ai dû changer le style NumericUpDown et pointer vers ma version modifiée du SpinnerStyle

1

Je pense que c'est la nature modale du MessageBox lui-même qui introduit le problème. Avec votre code, je peux reproduire le problème. Je peux également l'obtenir de sorte que lorsque le total est seulement 0 ou 1 un simple clic sur une case peut le faire passer à 3.

Cependant, quand je prends le MessageBox tout fonctionne comme prévu. NumericUpDown utilise un RepeatButton qui peut déclencher l'événement click plusieurs fois.

Questions connexes