WPF ComboBox, принудительный ввод в UpperCase - PullRequest
3 голосов
/ 22 июня 2010

У меня есть редактируемый WPF ComboBox с TextSearchEnabled. Мне нужно заставить ввод текста пользователем в верхнем регистре, когда они вводят, чтобы фильтровать ComboBox.

Я думал об изменении текстового поля, которое является частью элемента управления (названного 'PART_EditableTextBox'), чтобы установить CharacterCasing = "Upper" , однако я не могу понять, как это сделать.

Нужно ли использовать триггер или каким-либо образом изменить шаблон?

Ответы [ 4 ]

8 голосов
/ 20 июля 2010

Это работает и кажется разумным решением:

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

Убедитесь, что выпадающий список не свернут при загрузке, иначе шаблон не будет найден.

3 голосов
/ 22 июня 2010

IMO, более быстрый способ состоит в том, чтобы установить UpdateTrigger в PropertyChanged и в объекте данных прописать значение в верхнем регистре при его обновлении.

1 голос
/ 23 октября 2013

Я обнаружил, что post , где используется прикрепленное свойство. Это позволяет использовать это для всего вашего ComboBox без переписывания кода.

0 голосов
/ 22 июня 2010
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;
        }
    }
}

или попробуйте создать прикрепленное поведение для текстового поля

...