2010-06-22 45 views
3

我有一个可编辑的WPF组合框和TextSearchEnabled。当他们键入以过滤ComboBox时,我需要强制用户的文本输入为大写。WPF组合框,强制输入到UpperCase

我正在考虑修改属于控件(名为'PART_EditableTextBox')的文本框来设置CharacterCasing =“Upper”,但是我无法完全弄清楚如何做到这一点。

我是否需要使用触发器或以某种方式修改模板?

回答

8

这工作和似乎是一个合理的解决方案:

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

确保组合框没有瘫倒在加载的,否则模板不会被发现。

+1

无法解析符号cbObservation ...? – 2015-05-14 08:59:25

+0

而不是“comboBox”和“cbObservation”,我使用组合框名称 – 2016-12-15 15:34:48

3

IMO,更快的方法是将UpdateTrigger设置为PropertyChanged,并在数据对象中更新时更新大写值。

-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; 
     } 
    } 
} 

或尝试创建attached behaviour for the textbox

+0

我相信这段代码会将所有大写字母去掉输入。 – 2010-06-22 16:55:01

+0

@Robert Rossney:我不这么认为。只有在字符较小的情况下,它才会被转换为大写字母,并明确地附加到文本框中,并且进一步的处理将变为假。如果它是较高的,那么它根本不处理。 – Amsakanna 2010-06-23 04:49:09

+0

好吧,我不会破坏你的惊喜,但你应该测试一下。它没有达到我期望的效果,但它没有达到你期望的效果。我从这个练习中得出的结论是,如果你处理'PreviewTextInput',你应该期望做大量的测试和思考,让结果以你想要的方式工作。 – 2010-06-23 08:17:30

1

我发现post其中使用附加的属性。允许您在不重写代码的情况下将其用于所有ComboBox。