如何使用 IsEditable=false 在 ComboBox 的 DropDown 中进行文本搜索

How to do text search in DropDown of ComboBox with IsEditable=false

我有一个 ComboBoxIsEditable = false。当用户下拉列表时,我想支持他搜索正确的项目,方法是滚动到适合用户键入的字母的第一个项目。

因此,当 DropDown 打开并且用户键入 'S' 时,我希望他滚动到名称以 'S' 开头的第一个项目(在我的例子中:客户)。

我无法使用内置的文本搜索,因为 ComboBox 的 IsEditable 为 false。用户只能 select 建议值之一(客户)。

我怎样才能进行文本搜索?这是我的代码:

<ComboBox x:Name="cmbCustomer" 
        ItemsSource="{Binding LstAllCustomers, Mode=TwoWay}"
        SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
        ItemContainerStyle="{StaticResource customerListStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="2" Text="{Binding ID}"/>
                <TextBlock Margin="2" Text="{Binding LastName}"/>
                <TextBlock Margin="2" Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

IsTextSearchEnabled 属性 设置为 true 并将 TextSearch.TextPath 附加 属性 到 "LastName" 或 "FirstName" 或不管你的 属性 叫什么:

<ComboBox x:Name="cmbCustomer" 
              ItemsSource="{Binding LstAllCustomers, Mode=TwoWay}"
              SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
              ItemContainerStyle="{StaticResource customerListStyle}"
              IsTextSearchEnabled="True" TextSearch.TextPath="LastName">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="2" Text="{Binding ID}"/>
                <TextBlock Margin="2" Text="{Binding LastName}"/>
                <TextBlock Margin="2" Text="{Binding FirstName}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

即使您没有将 IsEnabled 属性 设置为 true,这也应该有效,假设您的 Customer class 实际上有一个 LastName 属性.