我有一个可编辑的WPF ComboBox,启用了TextSearchEnabled。当用户输入文本以过滤ComboBox时,我需要强制将其文本输入转换为大写。
我考虑修改控件的一部分——文本框(名为“PART_EditableTextBox”),设置CharacterCasing="Upper",但我不太确定如何做到这一点。
我需要使用触发器或以某种方式修改模板吗?
这个方法运行正常,看起来是一个合理的解决方案:
protected void winSurveyScreen_Loaded(object sender, RoutedEventArgs e)
{
(comboBox.Template.FindName("PART_EditableTextBox", cbObservation) as TextBox).CharacterCasing = CharacterCasing.Upper;
}
确保在加载时下拉框未折叠,否则模板将无法找到。
在我看来,更快的方法是将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;
}
}
}
或者尝试为文本框创建一个附加行为
PreviewTextInput
,你应该预计需要进行大量的测试和思考,以使结果按照你的意愿工作。 - Robert Rossney