如何使用IsEditable = false

时间:2018-08-27 09:07:35

标签: wpf combobox text-search

我有一个ComboBox和一个IsEditable = false。当用户下拉列表时,我想通过滚动到适合用户键入字母的第一个项目来支持他搜索正确的项目。

因此,当DropDown打开并且用户键入“ S”时,我希望他滚动到名称以“ S”开头的第一项(在我的情况下为“ customer”)。

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

无论如何我如何进行文本搜索?这是我的代码:

<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>

1 个答案:

答案 0 :(得分:1)

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类的属性实际上设置为Customer,即使您没有将LastName属性设置为true,这也应该起作用。