WPF ComboBox,强制输入大写

3

我有一个可编辑的WPF ComboBox,启用了TextSearchEnabled。当用户输入文本以过滤ComboBox时,我需要强制将其文本输入转换为大写。

我考虑修改控件的一部分——文本框(名为“PART_EditableTextBox”),设置CharacterCasing="Upper",但我不太确定如何做到这一点。

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

4个回答

10

这个方法运行正常,看起来是一个合理的解决方案:

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

确保在加载时下拉框未折叠,否则模板将无法找到。


2
我使用了我的组合框名称,而不是“comboBox”和“cbObservation”。 - Mafu Josh

3

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


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

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

或者尝试为文本框创建一个附加行为


我相信这段代码将会从输入中删除所有大写字母。 - Robert Rossney
@Robert Rossney:我不这么认为。 只有当字符是小写时,它才会转换为大写并明确附加到文本框,并且进一步处理被设置为 false。 如果它是大写的话,则根本不会处理。 - Amsakanna
好的,我不会为你泄露惊喜,但是你应该进行测试。它没有做我期望的事情,但也没有做你期望的事情。从这个实验中得出的结论是:如果你处理PreviewTextInput,你应该预计需要进行大量的测试和思考,以使结果按照你的意愿工作。 - Robert Rossney
@Robert Rossney:我这里没有集成开发环境。你说得对,我应该测试一下。但是如果你已经测试过了,能告诉我出了什么问题,让我可以修复它吗?否则我会在回家后再处理它 :) - Amsakanna
嗯,这有点难以解释。有几个问题都与插入点有关。光标可能不在文本末尾,但这总是把字符放在那里。所以这是一个问题。更令人困惑的问题是,处理“PreviewTextInput”不仅可以防止字符正常添加到“Text”,还可以防止光标正常前进。因此,如果您将光标放在“TextBox”中并键入“abCd”,它将包含“CABD”,光标将位于C和A之间。 - Robert Rossney
我刚刚测试了这种方法,虽然它将字符转换为大写,但插入点仍然位于索引零,这使得用户无法按退格键删除任何字符。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接