Zone de texte.Événement TextChanged tir deux fois sur Windows Phone 7 émulateur

J'ai une question très simple application de test juste pour jouer avec Windows Phone 7. J'ai juste ajouté un TextBox et un TextBlock à l'INTERFACE standard du modèle. Le seul code personnalisé est la suivante:

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private int counter = 0;

    private void TextBoxChanged(object sender, TextChangedEventArgs e)
    {
        textBlock1.Text += "Text changed " + (counter++) + "\r\n";
    }
}

La TextBox.TextChanged événement est programmé pour TextBoxChanged dans le code XAML:

<TextBox Height="72" HorizontalAlignment="Left" Margin="6,37,0,0"
         Name="textBox1" Text="" VerticalAlignment="Top"
         Width="460" TextChanged="TextBoxChanged" />

Cependant, chaque fois que j'appuie sur une touche lors de l'exécution de l'émulateur (soit le clavier à l'écran ou de la physique, après avoir appuyé sur Pause pour permettre à celle-ci), il incrémente le compteur deux fois, l'affichage de deux lignes dans le TextBlock. Tout ce que j'ai essayé montre que l'événement est véritablement tir deux fois, et je n'ai aucune idée pourquoi. J'ai vérifié que c'est que d'être souscrit une fois - si je vous désabonner dans la MainPage constructeur, il ne se passe rien du tout (pour le bloc de texte) lors de la modification du texte.

J'ai essayé le code équivalent dans une application Silverlight, et il n'a pas eu lieu là. Je n'ai pas un physique de téléphone de reproduire cela en ce moment. Je n'ai trouvé aucune mention d'un problème connu dans le Windows Phone 7.

Quelqu'un peut-il expliquer ce que je fais mal, ou dois-je déclarer ce qu'un bug?

EDIT: Pour réduire le risque étant d'avoir deux contrôles de texte, j'ai essayé de supprimer les TextBlock complètement, et la modification de la TextBoxChanged méthode pour juste incrément counter. J'ai ensuite exécuter dans l'émulateur, tapé 10 lettres et puis mettre un point d'arrêt sur la counter++; ligne (juste pour se débarrasser de toute possibilité de rupture dans le débogueur est à l'origine de problèmes) et il montre counter 20.

EDIT: j'ai maintenant demandé dans le Windows Phone 7 forum... nous allons voir ce qui se passe.

  • Juste par intérêt - si vous vérifiez à l'intérieur de l'événement, est le contenu de la zone de texte le même les deux fois, l'événement se déclenche? Je ne sais pas vraiment pourquoi cela arriverait, comme j'ai l'habitude d'utiliser MVVM et la liaison de données à la place de la gestion des événements de ces choses (Silverlight et WPF, pas beaucoup d'expérience avec WP7).
  • Oui, je vois "l'après" le texte deux fois. Donc, si j'appuie sur "h" et l'affichage textBox1.Text dans le cadre de la textBlock1 outre, il affiche "h" dans les deux lignes.
  • Vous évoquez les 2 claviers, pourrait être un facteur? Vous pouvez les désactiver? Et peut-être vous pouvez vérifier si tous les membres de TextChangedEventArgs sont égaux dans les deux appels?
  • La plupart du temps je n'ai pas pris la peine permettant le clavier physique... mais seulement pour voir si cela aurait un effet. TextChangedEventArgs n'a pas vraiment beaucoup disponibles juste le OriginalSource, qui est toujours null.
  • Ce qui se passe lorsque vous définissez e.Manipulés = true?
  • TextChangedEventArgs n'ont pas de Handled propriété dans WP7 🙁
  • Il ressemble à un bug, il n'est pas lié au clavier parce que vous pouvez obtenir les mêmes résultats par simplement d'affecter une nouvelle valeur à la propriété Text, le TextChanged encore se déclenche deux fois.
  • Êtes-vous en tapant avec deux claviers de nouveau?
  • Soumettre un rapport de bogue sur WP7.
  • A ce fixe dans la RTM?
  • Ooh, je n'ai pas vérifié encore. Allons le faire aujourd'hui.
  • Salut, Est-ce bogue fixe déjà à cette époque? Merci
  • Je n'ai pas fait de Mangue de développement, de sorte qu'il peut être fixé là - mais je ne suis pas sûr.
  • uhmm suppose que je dois vérifier :).. en passant merci pour le temps que sir..
  • Dans mon windows phone 8 dispositif réel cela fonctionne bien.

InformationsquelleAutor Jon Skeet | 2010-08-09