2013-05-30 6 views
0

Медведь со мной. У меня есть ComboBox (WPF) в режиме автозаполнения. Легкая пыль правая? Просто установите IsEditable в true.ComboBox autocomplete странное поведение

<ComboBox 
    IsEditable="True" 
    Text="{Binding Model.TextEntered}" 
    ItemsSource="{Binding Model.ListWithOptions}"/> 

У меня есть ComboBox, и это автозаполнение просто отлично.

НО, когда я ввожу следующий текст 'caaaaa', он меняет его на 'CAaaaa'. Я понимаю текст автокомпонента ComboBox и сопоставляю его. Но когда я хочу войти в caaaaa (по какой-то причине), я не хочу «CAaaaa».

Любая идея решить эту проблему?

В качестве альтернативы я бы обосноваться за (если все остальное терпит неудачу):

  • При выходе регулятора, проверьте, если введенный текст не соответствует ни одному из параметров, установленных текст ToLower. (Как поведение)

enter image description here

ответ

7

Вы пробовали установить ShouldPreserveUserEnteredPrefix="True"? Это не изменит случай, который вводится в Combobox, но все равно будет соответствовать элементам в списке. Поэтому в вашем примере, если вы наберете «ca13», он найдет и выберет «CA132S», но он будет отображаться в поле со списком как «ca132s» (в случае его ввода).

Компромисс в том, как элемент отображается, возможно, но он выберет правильный элемент и позволит вам вводить символы в любом случае без изменений.

+0

Отлично. Долгое время искал этот вопрос, почему я этого не заметил :(Спасибо Richard –

+0

Это свойство поддерживается только в .NET 4.5.Есть ли эквивалентное свойство в .NET 4.0? – DonDon

2

Попробуйте установить IsTextSearchCaseSensitive proprty истина для ComboBox. Не уверен, что это свойство доступно в более старых версиях .NET.

+0

Доступен. Он решает проблему обсадной колонны, но автоматическое заполнение теперь чувствительно к регистру, что неприемлемо. –

+0

Угадайте, я неправильно понял ваш вопрос. Вы хотите, чтобы он был чувствительным к регистру. Не так ли? Как иначе 'caaaaa' отличается от aCAaaaa ' – Nishant

+0

Требование 1) Мне нужно, чтобы он не учитывал регистр, чтобы найти элементы в списке. Требование 2) Пользователь может ввести значение, которое не отображается в списке. Поэтому при наборе «ca» заголовок переходит в «CA», потому что он комбо находит «CA132S», когда пользователь продолжает вводить текст для ввода «caaaaa», он становится «CAaaaa». –

1

Не могли бы вы использовать оператор if, чтобы проверить, соответствует ли оно чему-либо в списке, а если нет, не меняйте его? Как и проверка после ввода каждой буквы, и если она не соответствует изменению, она возвращается к случаю, который был первоначально введен?

Или есть причина, по которой вы хотите, чтобы люди могли вводить то, чего нет в списке? Если нет, не могли бы вы использовать IsTextSearchEnabled, а не IsEditable?

+0

Привет, Kat, я не хочу, чтобы combobox был автозаполнен, а также пусть пользователь добавляет строку, которой нет в списке. –

+0

@ RalfdeKleine МОЖЕТ попробовать попробовать автозаполнение для IsTextSearchEnabled ... Я не понимаю, почему это не сработает для combobox ... Я знаю, что в игре, которую я играю, есть раскрывающийся список, который, если вы откроете список и запустите набрав его, он переходит к первому совпадению в списке ... Я не понимаю, почему это не сработает, показывая, что пользователь вводит ... потому что кажется, что ваша проблема - это часть автозаполнения, которая меняет текст в поле пытается совместить то, что в коробке ... Я не знаю точно, но я ДУМАЮ, что IsTextSearchEnabled будет делать то, что вы хотите. –

Смежные вопросы