通过键盘"预先输入"搜索在WPF列表框中选择项目

Nat*_*ate 3 wpf listbox selection typeahead

我有一个WPF Listbox控件,我想允许用户使用预先输入更改所选项目.我正在寻找的行为与Windows资源管理器完全一样.当您继续键入文件夹名称的文本时,列表将继续选择更正确的项目.

例如,假设此文件夹结构:

OtherFolderName
MyFirstFolder
MyFirstFileFolder
MyFirstList
Run Code Online (Sandbox Code Playgroud)

如果您OtherFolderName使用鼠标选择,则开始键入MyFirstF该项目MyFirstFolder将被选中,但如果您继续键入MyFirstFi该项目MyFirstFileFolder将被选中.

我的WPF列表框没有表现出这种行为,我希望我可以轻松启用它,因为旧的WinForms列表框就是这样做的.

Ray*_*rns 7

看一下TextSearch类,特别是TextSearch.TextPath附加属性:

<ListBox TextSearch.TextPath="FolderName" ... />
Run Code Online (Sandbox Code Playgroud)

TextSearch.TextPath属性启用文本搜索,并指定如何从每个项目中提取搜索文本.在这种情况下,我假设您的每个Folder对象都有一个名为"FolderName"的属性.

如果这不能满足您的需求,您可能必须实施自己的搜索,因为TextSearch功能不是特别可调.去做这个:

  1. 处理TextInput事件
  2. 比较当前TextInput与先前TextInput的时间.如果足够接近,则附加到前缀字符串,否则将其设置为键入的单个字符.
  3. 搜索给定前缀的所有项目,如果找到,则设置SelectedItem.

我将使用附加属性将其构建为一个单独的类,类似于内置的TextSearch类.