如何通过在WPF组合框中键入键盘字母键来选择项目?

时间:2010-02-05 09:08:46

标签: wpf select combobox hotkeys

我有一个WPF ComboBox,当我输入该字母时,我想转到ComboBox中以(例如)“e”开头的项目。怎么样?

我的XAML代码:

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

3 个答案:

答案 0 :(得分:23)

编辑:我猜你有ItemTemplate看起来有点像这样:

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

如果您想搜索Foo,请尝试...

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

默认情况下,ComboBox有一种基于第一个字母查找匹配项的自动填充功能 - 假设您的源按字母顺序排序,这会将所选项目移动到(例如)以“e”开头的部分。

如果您希望以相同的字母开头的多个条目,捕获KeyDown以强制打开下拉列表可能会有用。

答案 1 :(得分:13)

假设您的商品按字母顺序排序,只需设置IsTextSearchEnabled="True"即可跳转到您在ComboBox键入的字母(或字母)开头的商品。

以下是我ComboBox之一的示例,我简化了绑定,因为它显然不是这里的重要部分......

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

这适用于从列表中选择值,但是,您输入的搜索值不会显示在控件的TextBox部分中,因为我将IsEditable设置为false。

如果有人想解释为什么会被投票,我将不胜感激,我没有看到我提供的答案有任何问题,也不明白为什么我只有在我只是失去声誉的时候试图提供帮助(并提供了合理的答案!)

答案 2 :(得分:0)

我所要做的就是添加以下内容:

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