我有一个可编辑的WPF组合框和TextSearchEnabled。当他们键入以过滤ComboBox时,我需要强制用户的文本输入为大写。WPF组合框,强制输入到UpperCase
我正在考虑修改属于控件(名为'PART_EditableTextBox')的文本框来设置CharacterCasing =“Upper”,但是我无法完全弄清楚如何做到这一点。
我是否需要使用触发器或以某种方式修改模板?
我有一个可编辑的WPF组合框和TextSearchEnabled。当他们键入以过滤ComboBox时,我需要强制用户的文本输入为大写。WPF组合框,强制输入到UpperCase
我正在考虑修改属于控件(名为'PART_EditableTextBox')的文本框来设置CharacterCasing =“Upper”,但是我无法完全弄清楚如何做到这一点。
我是否需要使用触发器或以某种方式修改模板?
这工作和似乎是一个合理的解决方案:
protected void winSurveyScreen_Loaded(object sender, RoutedEventArgs e)
{
(comboBox.Template.FindName("PART_EditableTextBox", cbObservation) as TextBox).CharacterCasing = CharacterCasing.Upper;
}
确保组合框没有瘫倒在加载的,否则模板不会被发现。
IMO,更快的方法是将UpdateTrigger设置为PropertyChanged,并在数据对象中更新时更新大写值。
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;
}
}
}
我相信这段代码会将所有大写字母去掉输入。 – 2010-06-22 16:55:01
@Robert Rossney:我不这么认为。只有在字符较小的情况下,它才会被转换为大写字母,并明确地附加到文本框中,并且进一步的处理将变为假。如果它是较高的,那么它根本不处理。 – Amsakanna 2010-06-23 04:49:09
好吧,我不会破坏你的惊喜,但你应该测试一下。它没有达到我期望的效果,但它没有达到你期望的效果。我从这个练习中得出的结论是,如果你处理'PreviewTextInput',你应该期望做大量的测试和思考,让结果以你想要的方式工作。 – 2010-06-23 08:17:30
我发现post其中使用附加的属性。允许您在不重写代码的情况下将其用于所有ComboBox。
无法解析符号cbObservation ...? – 2015-05-14 08:59:25
而不是“comboBox”和“cbObservation”,我使用组合框名称 – 2016-12-15 15:34:48