2011-05-13 2 views
0

J'ai 2 contrôles sur un formulaire. Un NumericUpDown (de la boîte à outils Silverlight) et un simple rectangle.numericUpDown ValueChanged après MouseLeftButtonDown

Sur le MouseLeftButtonDown du rectangle Je PopUp un MessageBox avec la valeur NumericUpDown.

Si j'utilise les flèches pour modifier la valeur de numericUpDown, everyting est correct. Mais si je modifie la valeur manuellement (avec le clavier) et que je clique immédiatement sur le Rectangle, il affiche la valeur précédente de numericUpDown. Si je clique sur un temps de sencond sur le rectangle, il montrera la nouvelle valeur.

Le numericUpDown.ValueChanged événement est augmentée après la Rectangle.MouseLeftButtonDown événement.

Est-ce un bug Silverlight? Quelqu'un sait une solution de contournement pour cela?

(BTW, je ne peux pas changer mes commandes de rectangle ou d'événements)

Répondre

0

Pour contourner ce problème, je vous propose de créer votre propre contrôle comme:

public class MyNumericUpDown : NumericUpDown 
    { 
     private TextBox _textBox; 
     public void Sync() 
     { 
      ApplyValue(_textBox.Text); 
     } 
     public override void OnApplyTemplate() 
     { 
      base.OnApplyTemplate(); 
      _textBox = (TextBox)GetTemplateChild("Text"); 
     } 
    } 

Maintenant, vous pouvez utiliser la méthode Sync pour synchroniser le texte d'affichage avec le contrôle Propriété de valeur. Vous pouvez appeler la méthode de XAML de manière déclarative ou dans le code derrière. Dans votre cas:

private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      myNumericUpDown.Sync(); 
      MessageBox.Show(myNumericUpDown.Value.ToString()); 
     } 
Questions connexes