J'essaie de trouver la meilleure façon de sélectionner tout le texte dans un TextBox la première fois que le contrôle est chargé. J'utilise le modèle MVVM, donc j'utilise la liaison bidirectionnelle pour la propriété Text du TextBox à une chaîne sur mon ViewModel. J'utilise ce TextBox pour "renommer" quelque chose qui a déjà un nom, donc je voudrais sélectionner l'ancien nom quand le contrôle se charge afin qu'il puisse facilement être supprimé et renommé. Le texte initial (ancien nom) est rempli en le définissant dans mon ViewModel et il est ensuite reflété dans le TextBox après la liaison de données terminée.Sélectionnez le texte initial dans un TextBox Silverlight
Ce que je vraiment aime faire est quelque chose comme ceci:
<TextBox x:Name="NameTextBox" Text="{Binding NameViewModelProperty, Mode=TwoWay}" SelectedText="{Binding NameViewModelProperty, Mode=OneTime}" />
Fondamentalement, il suffit d'utiliser le texte entier comme SelectedText avec OneTime obligatoire. Toutefois, cela ne fonctionne pas puisque le SelectedText n'est pas un DependencyProperty. Je ne suis pas complètement contre l'ajout du code de sélection dans le code-behind de ma vue, mais mon problème dans ce cas est de déterminer quand la liaison de texte initiale est terminée. Le TextBox commence toujours vide, donc il ne peut pas être fait dans le constructeur. L'événement TextChanged semble uniquement se déclencher lorsqu'un utilisateur entre un nouveau texte, pas lorsque le texte est modifié à partir de la liaison initiale du ViewModel.
Toutes les idées sont grandement appréciées!
Je ne crois pas que le sous-classement était vraiment nécessaire pour cela, mais l'appel de SelectAll() sur l'événement GotFocus de TextBox a effectivement obtenu ce que je voulais même avec du texte lié aux données. Je ne vois aucune raison réelle pour que ce soit une sous-classe, je l'ai juste fait dans mon code-behind et il pourrait facilement être refactorisé dans un comportement de mélange si je voulais obtenir plus de MVVMish. Merci! –