Как выбрать элемент, введя клавишу с буквой клавиатуры в поле со списком WPF?
У меня есть WPF ComboBox
, и я хочу перейти к элементам, которые начинаются с (например) "e" в ComboBox
при вводе этой буквы. Как?
Мой код XAML:
<ComboBox ItemsSource="{Binding Roles}" SelectedValuePath="Id"
ItemTemplate="{StaticResource ComboBoxDisplayName}"
SelectedItem="{Binding SelectedRole}"
Width="150"/>
Ответы
Ответ 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 "