wpf - 通过键盘 "Type-Ahead"搜索选择 WPF 列表框中的项目

标签 wpf listbox selection typeahead

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

例如假设这个文件夹结构:

OtherFolderName
MyFirstFolder
MyFirstFileFolder
MyFirstList

如果您选择 OtherFolderName用鼠标,然后开始输入 MyFirstF项目 MyFirstFolder将被选中,但如果您继续输入 MyFirstFi项目 MyFirstFileFolder将被选中。

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

最佳答案

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

<ListBox TextSearch.TextPath="FolderName" ... />

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

如果这不能满足您的所有要求,您可能必须实现自己的搜索,因为 TextSearch 功能不是特别可调整的。去做这个:
  • 处理 TextInput 事件
  • 将当前 TextInput 的时间与前一个 TextInput 的时间进行比较。如果足够接近,则附加到前缀字符串,否则将其设置为键入的单个字符。
  • 搜索给定前缀的所有项目,如果找到设置 SelectedItem。

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

    关于wpf - 通过键盘 "Type-Ahead"搜索选择 WPF 列表框中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209774/

    相关文章:

    wpf - 无法在 WPF 中完全设置 ListBox/Scrollviewer 的样式

    Python 填充字符串以对齐 Tkinter ListBox 小部件中的列

    java - 这个错误是选择还是有条件的? ( java )

    c# - 在 WPF 中加载 XAML 后访问 UIElement

    c# - 外壳文件错误 : missing assembly reference?

    wpf - 如何传递IValueConverter参数?

    wpf - ListBox 总是自动选择第一项

    ios - 在 iOS 应用程序(iPhone 和 iPad)中手动选择语言

    javascript - d3 改变所有元素的属性

    WPF TreeView 专注于新添加的项目