J'ai une application de test très simple pour m'amuser avec Windows Phone 7. J'ai juste ajouté un TextBox
et un TextBlock
au modèle standard de l'interface utilisateur. Le seul code personnalisé est le suivant :
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";
}
}
Le site TextBox.TextChanged
L'événement est relié à TextBoxChanged
dans le 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 dans l'émulateur (que ce soit le clavier à l'écran ou le clavier physique, après avoir appuyé sur Pause pour activer ce dernier), le compteur s'incrémente deux fois, affichant deux lignes dans le champ TextBlock
. Tout ce que j'ai essayé montre que l'événement est réellement déclenché deux fois, et je ne sais pas pourquoi. J'ai vérifié qu'il n'est souscrit qu'une seule fois - si je me désinscris dans l'événement MainPage
rien ne se passe (dans le bloc de texte) lorsque le texte change.
J'ai essayé le code équivalent dans une application Silverlight ordinaire, et le problème ne s'est pas produit. Je n'ai pas de téléphone physique pour reproduire ce problème pour le moment. Je n'ai trouvé aucune trace de ce problème connu dans Windows Phone 7.
Quelqu'un peut-il m'expliquer ce que je fais de mal, ou dois-je le signaler comme un bug ?
EDIT : Pour réduire la possibilité que cela soit dû au fait d'avoir deux contrôles de texte, j'ai essayé de supprimer l'option TextBlock
complètement, et en changeant la méthode TextBoxChanged en juste incrémenter counter
. J'ai ensuite exécuté dans l'émulateur, tapé 10 lettres et puis mettre un point d'arrêt sur le counter++;
(juste pour éliminer toute possibilité que l'entrée dans le débogueur cause des problèmes) - et il affiche counter
comme 20.
EDIT : J'ai maintenant demandé dans le forum Windows Phone 7 ... nous verrons ce qui se passe.
0 votes
Par curiosité, si vous vérifiez dans l'événement, le contenu de la boîte de texte est-il le même chaque fois que l'événement se déclenche ? Je ne sais pas vraiment pourquoi cela se produit, car j'utilise habituellement MVVM et la liaison de données au lieu de la gestion des événements pour ces choses (Silverlight et WPF, pas beaucoup d'expérience avec WP7).
0 votes
@Rune : Oui, je vois le texte "après" deux fois. Donc si j'appuie sur "h" et que j'affiche
textBox1.Text
dans le cadre de l'ajout de textBlock1, il affichera "h" dans les deux lignes.1 votes
Vous mentionnez les deux claviers, cela pourrait-il être un facteur ? Pouvez-vous en désactiver un ? Et peut-être pouvez-vous vérifier si tous les membres de TextChangedEventArgs sont égaux dans les deux appels ?
0 votes
@Henk : La plupart du temps, je n'ai pas pris la peine d'activer le clavier physique... seulement pour voir si cela avait un effet.
TextChangedEventArgs
n'a pas vraiment beaucoup d'éléments disponibles - juste lesOriginalSource
qui est toujours nul.0 votes
Que se passe-t-il lorsque vous définissez e.Handled = true ?
0 votes
TextChangedEventArgs
n'a pas deHandled
propriété dans WP7 :(3 votes
Cela ressemble à un bogue, qui n'est pas lié au clavier car vous pouvez obtenir les mêmes résultats en assignant simplement une nouvelle valeur à la propriété Text, le TextChanged se déclenche toujours deux fois.
0 votes
Vous tapez encore avec deux claviers ?
0 votes
@Richard : Ooh, je n'ai pas encore vérifié. Je le ferai aujourd'hui.
0 votes
@JonSkeet Bonjour, ce bug est-il déjà corrigé à l'heure actuelle ? Merci
0 votes
@AllanChua : Je n'ai pas fait de développement Mango, donc il se peut que le problème soit corrigé là-bas - mais je n'en suis pas sûr.
0 votes
@JonSkeet uhmm je suppose que je dois vérifier :) au fait merci pour le temps passé monsieur .
0 votes
Dans mon appareil réel Windows phone 8, cela fonctionne bien.