【发布时间】:2010-06-22 10:49:31
【问题描述】:
我有一个带有 TextSearchEnabled 的可编辑 WPF 组合框。当用户键入以过滤 ComboBox 时,我需要强制用户的文本输入为大写。
我正在考虑修改作为控件一部分的文本框(名为“PART_EditableTextBox”)以设置 CharacterCasing="Upper",但我不太清楚如何做到这一点。
我是否需要使用触发器,或以某种方式修改模板?
【问题讨论】:
我有一个带有 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,并在数据对象中,在更新时将值大写。
【讨论】:
我发现post 使用了附加属性。允许在不重写代码的情况下将其用于所有 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;
}
}
}
【讨论】:
PreviewTextInput,你应该期望必须做大量的测试和思考才能让结果以你想要的方式工作。
PreviewTextInput 不仅会阻止字符正常添加到Text,还会阻止插入符号正常前进。因此,如果您将插入符号放在 TextBox and type abCd, it will contain CABD` 中,插入符号将位于 C 和 A 之间。