如何使用 IsEditable=false 在 ComboBox 的 DropDown 中进行文本搜索
How to do text search in DropDown of ComboBox with IsEditable=false
我有一个 ComboBox
和 IsEditable = 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
属性.
我有一个 ComboBox
和 IsEditable = 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
属性.