Как выбрать элемент, введя буквенную клавишу клавиатуры в поле со списком WPF? - PullRequest
18 голосов
/ 05 февраля 2010

У меня есть WPF ComboBox, и я хочу перейти к элементам, которые начинаются с (например) "e" в ComboBox, когда я набираю эту букву. Как?

Мой код XAML:

<ComboBox ItemsSource="{Binding Roles}" SelectedValuePath="Id"
          ItemTemplate="{StaticResource ComboBoxDisplayName}"
          SelectedItem="{Binding SelectedRole}"
          Width="150"/> 

Ответы [ 3 ]

23 голосов
/ 05 февраля 2010

РЕДАКТИРОВАТЬ: Я предполагаю, что у вас есть ItemTemplate, который выглядит примерно так:

<StackPanel>
    <TextBlock Text="{Binding Path=Foo}" />
    <TextBlock Text="{Binding Path=Bar}" />
</StackPanel>

Если вы хотите выполнить поиск по Foo, попробуйте ...

<ComboBox IsEditable = "True" TextSearch.TextPath = "Foo" />

По умолчанию ComboBox имеет вид автозаполнения, который находит совпадения по первой букве - при условии, что ваш источник отсортирован по алфавиту, это сместит выбранный элемент в раздел, который (например) начинается с «e».

Перехват KeyDown для принудительного открытия раскрывающегося списка может быть полезен, если вы ожидаете несколько записей, начинающихся с одной буквы.

13 голосов
/ 05 февраля 2010

Если ваши элементы отсортированы по алфавиту, просто установите IsTextSearchEnabled="True", чтобы перейти к элементам, начинающимся с буквы (или букв), которые вы вводите в ComboBox.

Вот пример одного из моих ComboBox я, я упростил привязки, поскольку это явно не важная часть здесь ...

<ComboBox ItemsSource="{Binding MyObjectList}"
          DisplayMemberPath="Description"
          SelectedValuePath="Code"
          IsTextSearchEnabled="True"/>

Это прекрасно работает для выбора значения из списка, однако введенное вами значение поиска не будет отображаться в части TextBox элемента управления, поскольку у меня IsEditable установлено значение false.

Если кто-то захочет объяснить, почему за него проголосовали, это будет оценено, я не вижу никаких проблем с ответом, который я дал, и не понимаю, почему я заслуживаю потерять репутацию, когда я только пытаясь помочь (и предоставили разумный ответ!)

0 голосов
/ 05 июня 2014

Все, что мне нужно было сделать, это добавить следующее:

TextSearch.TextPath="<what ever you bound to goes here> ie:State or name "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...