如何在不可编辑的ComboBox中使用前缀突出显示实现搜索功能?

时间:2012-05-03 04:06:00

标签: wpf autocomplete combobox

我想创建组合,它只允许从固定列表中进行选择,但具有可编辑组合等搜索功能,即当您键入组合搜索与您键入的前缀匹配的项目时,前缀后面的文本会突出显示在选择框。

我认为我可以实现必要的逻辑来进行搜索,但我不知道如何让突出显示工作。我想我可以用文本块组合组合项目并使用和返回颜色来实现突出显示,但项目会以某种方式需要知道它在选择框中呈现,而不是下拉区域。 使用IsEditable = false时,会有一些前缀搜索功能,但它是瞬态的 - 如果您没有键入任何内容一两秒,则重置前缀。为了使其可用,用户需要查看他键入的内容并根据需要使用退格编辑前缀,因此突出显示前缀非常重要。

组合可能有很多长项,我希望用户必须时间找到他想要的项目。将IsEditable设置为true会提供或多或少的搜索行为,但我不希望用户能够在与任何项目不匹配的框中键入文本。

我已经考虑过自定义一个可编辑的组合,只接受与列表中的项匹配的按键,并且取得了一定程度的成功,但我不想要一个可编辑组合的选择行为 - 请参阅此问题https://stackoverflow.com/questions/10442021/how-can-i-customize-an-editable-wpf-combo-to-prevent-changing-the-selected-value

1 个答案:

答案 0 :(得分:0)

ComboBox即使IsEditable="False"也会显示第一个匹配的条目。

您遇到的问题可能是一个固定列表,其中有多个条目以相同的方式开头。例如:

AAAA
AACC
BBBB

在这种情况下,您可以为每个条目指定一个唯一键:

<ComboBox IsEditable="False">
    <ComboBoxItem Content="AAAA" TextSearch.Text="A" />
    <ComboBoxItem Content="BBBB" TextSearch.Text="B" />
    <ComboBoxItem Content="AACC" TextSearch.Text="C" />
</ComboBox> 

然后,如果您输入 C AACC ,则会选择该条目。