Как выбрать объект путем ввода ключа буквы клавиатуры в поле комбинированного списка WPF?

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

Мой код XAML:

<ComboBox ItemsSource="{Binding Roles}" SelectedValuePath="Id"
          ItemTemplate="{StaticResource ComboBoxDisplayName}"
          SelectedItem="{Binding SelectedRole}"
          Width="150"/> 
19
задан Michael Myers 23 May 2013 в 22:24
поделиться

2 ответа

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

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

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

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

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

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

23
ответ дан 30 November 2019 в 03:34
поделиться

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

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

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

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

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

14
ответ дан 30 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: