У меня есть WPF ComboBox
и я хочу перейти к объектам, которые запускаются с (например), "e" в ComboBox
когда я ввожу ту букву. Как?
Мой код XAML:
<ComboBox ItemsSource="{Binding Roles}" SelectedValuePath="Id"
ItemTemplate="{StaticResource ComboBoxDisplayName}"
SelectedItem="{Binding SelectedRole}"
Width="150"/>
РЕДАКТИРОВАТЬ: Я предполагаю, что у вас есть ItemTemplate
, который выглядит примерно так:
<StackPanel>
<TextBlock Text="{Binding Path=Foo}" />
<TextBlock Text="{Binding Path=Bar}" />
</StackPanel>
Если вы хотите искать по Foo, попробуйте ...
<ComboBox IsEditable = "True" TextSearch.TextPath = "Foo" />
По умолчанию ComboBox
имеет своего рода автозаполнение, которое находит совпадения на основе первой буквы - если исходный текст отсортирован по алфавиту, это смещает выбранный элемент в раздел, который (например) начинается с «e».
Перехват KeyDown
для принудительного открытия раскрывающегося списка может быть полезен, если вы ожидаете, что несколько записей начинаются с одной и той же буквы.
Предполагая, что ваши элементы отсортированы по алфавиту, просто установите IsTextSearchEnabled = "True"
, чтобы перейти к элементам, начинающимся с буквы (или букв ) введите в ComboBox
.
Вот пример одного из моих ComboBox
, я упростил привязки, поскольку это явно не важная часть ...
<ComboBox ItemsSource="{Binding MyObjectList}"
DisplayMemberPath="Description"
SelectedValuePath="Code"
IsTextSearchEnabled="True"/>
Это отлично работает для выбора значения из списка, однако вводимое вами значение поиска не будет отображаться в части TextBox элемента управления, поскольку у меня IsEditable
установлено значение false.
Если кто-нибудь захочет объяснить, почему это было отклонено, это было бы признательно. Я не вижу проблем с предоставленным мной ответом и не понимаю, почему я заслуживаю потери репутации, когда я пытаюсь помочь (и предоставили разумный ответ!)