Автозаполнение для ComboBox в WPF в любом месте текста (не только начало) - PullRequest
29 голосов
/ 07 февраля 2009

У меня есть ComboBox в WPF, который я довольно много разобрал (у него есть свой шаблон и шаблон элемента). Теперь я понял, что он работает так, как я хочу, за исключением того, что когда я печатаю в ComboBox, он выполняет фильтрацию для меня, но только фильтры, предполагающие, что я набираю, запускают имя элемента в ComboBox.

Например, если у меня есть элемент в ComboBox под названием «Windows Media Player», он найдет его, только если я начну вводить «Windows Media ...», и не найдет его, если я начну вводить «Media Play». .. ". Есть ли способ обойти это? Могу ли я установить свойство где-нибудь, чтобы оно указывало на поиск во всей строке, а не просто с помощью StartsWith ()?

Если нет, то какой лучший способ заставить его сделать это сам? Есть ли какой-нибудь способ взять исходный элемент управления и в основном просто изменить вызов StartsWith () на вызов Contains (), или мне придется перейти на более низкий уровень?

Ответы [ 5 ]

38 голосов
/ 01 декабря 2011

Теперь в поле со списком поддерживается автозаполнение, просто укажите в xaml поле со списком

IsEditable="True"
8 голосов
/ 30 декабря 2009

Ознакомьтесь со следующей статьей в CodeProject: Многоразовый текстовый блок автозаполнения WPF

4 голосов
/ 18 февраля 2009

Вы можете попробовать обработать события ComInBox TextInput или PreviewTextInput, выполнить текстовый поиск самостоятельно, выбрать наиболее подходящий элемент и установить «e.Handled = true». Просто мысль. Надеюсь, это поможет!

редактирование:

Это работает для одного символа (т. Е. Если вы введете букву «j», он выберет первый элемент, содержащий «j» или «J»), но я уверен, что есть способ сделать это с ваш контроль. Наслаждайтесь!

private void MyComboBox_PreviewTextInput(object sender, TextCompositionEventArgs e) {
    foreach (ComboBoxItem i in MyComboBox.Items) {
        if (i.Content.ToString().ToUpper().Contains(e.Text.ToUpper())) {
            MyComboBox.SelectedItem = i;
            break;
        }
    }
    e.Handled = true;
}
4 голосов
/ 09 февраля 2009

Насколько я знаю, нет способа заставить стандартный ComboBox вести себя так, просто изменив настройку. Таким образом, вам придется реализовать свой собственный производный список для этого или искать готовый сторонний элемент управления (я полагаю, их много).

2 голосов
/ 18 февраля 2009

Поле со списком WPF не поддерживает автозаполнение

Вот пример, который позволяет вам сделать это косвенным образом, применив фильтр к элементам.

См. http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cec1b222-2849-4a54-bcf2-03041efcf304/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...