我有一个带有 TextSearchEnabled 的可编辑 WPF 组合框。我需要在用户键入以过滤 ComboBox 时强制用户的文本输入为大写。
我正在考虑修改作为控件一部分的文本框(名为“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,并且在数据对象中,在更新时将值大写。
我发现使用附加属性的帖子。允许在不重写代码的情况下将其用于所有 ComboBox。
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;
}
}
}
或尝试为文本框创建附加行为