Подтвердить что ты не робот

Как выбрать элемент, введя клавишу с буквой клавиатуры в поле со списком WPF?

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

Мой код XAML:

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

Ответ 1

EDIT: Я предполагаю, что у вас есть ItemTemplate, который выглядит примерно так:

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

TextSearch.TextPath="<what ever you bound to goes here> ie:State or name "