2010-06-22 5 views
3

J'ai un WPF ComboBox modifiable avec TextSearchEnabled. J'ai besoin de forcer l'entrée de texte de l'utilisateur en majuscules quand ils tapent pour filtrer le ComboBox.WPF ComboBox, force d'entrée à UpperCase

Je pensais à modifier la zone de texte qui fait partie du contrôle (nommé « PART_EditableTextBox ») pour régler CharacterCasing = « supérieur », je peux comprendre cependant pas tout à fait comment le faire.

Dois-je utiliser un déclencheur ou modifier le modèle d'une manière ou d'une autre?

Répondre

8

Cela fonctionne et semble une solution raisonnable:

protected void winSurveyScreen_Loaded(object sender, RoutedEventArgs e) 
{ 
    (comboBox.Template.FindName("PART_EditableTextBox", cbObservation) as TextBox).CharacterCasing = CharacterCasing.Upper; 
} 

Assurez-vous que le combobox n'est pas effondré sur chargee sinon le modèle ne sera pas trouvée.

+1

Impossible de résoudre le symbole cbObservation ...? –

+0

Au lieu de "comboBox" et "cbObservation", j'ai utilisé par nom combobox –

3

IMO, la méthode la plus rapide consiste à définir UpdateTrigger sur PropertyChanged et, dans l'objet de données, à mettre en majuscules la valeur lors de sa mise à jour.

-1
private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    Textbox editableTextbox = sender as Textbox; 
    foreach (char ch in e.Text) 
    { 
     if (Char.IsLower(ch)) 
     { 
      editableTextbox.Text += Char.ToUpper(ch); 
      e.Handled = true; 
     } 
    } 
} 

ou essayer de créer un attached behaviour for the textbox

+0

Je crois que ce code supprimera tous les caractères majuscules de l'entrée. –

+0

@Robert Rossney: Je ne pense pas. Seulement si le caractère est inférieur, il sera converti en majuscules et explicitement ajouté à la zone de texte et la manipulation ultérieure est fausse. Si c'est supérieur, alors il n'est pas manipulé du tout. – Amsakanna

+0

Eh bien, je ne vais pas gâcher la surprise pour vous, mais vous devriez tester cela. Il ne fait pas ce que je m'attendais à faire, mais il ne fait pas ce que vous attendiez de lui non plus. Et la conclusion que j'ai tirée de cet exercice est que si vous manipulez 'PreviewTextInput', vous devriez vous attendre à devoir faire beaucoup de tests et de réflexion pour que le résultat fonctionne comme vous le souhaitez. –

1

J'ai trouvé que post où la propriété attachée est utilisée. Cela permet d'utiliser cela pour l'ensemble de votre ComboBox sans réécrire le code.