2010-11-12 7 views
2

Comment est-ce que je fais en sorte que lorsqu'un utilisateur tape des lettres dans une zone de texte dans Silverlight qu'il change ces lettres à toutes les capitales? Et en même temps allume toujours les mêmes événements tels que la pression des touches.Comment masquer automatiquement une zone de texte

Répondre

1

Il n'y avait pas de moyen facile de le faire, sauf pour utiliser une police intégrée majuscule. Toutes les autres façons interféraient avec le fonctionnement de la zone de texte.

0

La façon la plus simple serait:

private void tb_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    var tb = (TextBox)sender; 
    var caret = tb.CaretIndex; 
    tb.Text = tb.Text.ToUpper(); 
    tb.CaretIndex = caret; 
} 

Si vous voulez économiser encore plus de performance, gérer l'événement LostFocus au lieu (que vous alors n'avez pas à vous soucier de la position carret soit):

private void tb_LostFocus(object sender, RoutedEventArgs e) 
{ 
    var tb = (TextBox)sender; 
    tb.Text = tb.Text.ToUpper(); 
} 

Mais si les données sont liées à un modèle/une entité, j'appellerais le ToUpper() sur le setter de la propriété d'objet lié/OnPropertyChanged, OnTextChanged ou quoi que ce soit dans l'entité.

1

Si vous voulez éviter le code derrière ou les contrôles personnalisés (préférable), ce type de fonctionnalité est disponible via les comportements.

par exemple. celui-ci in the Expression blend Gallery convertit en majuscules toute zone de texte à laquelle il est attaché.

Ensuite, il suffit de glisser-déposer dans Blend ou d'ajouter le déclencheur manuellement dans VS2010.

Questions connexes