这是两部分的。
首先,在WPF中,标准的ListBox控件自动支持对其项进行内联搜索。它通过使用项目的ToString函数来完成此操作,这意味着如果您将焦点放在列表框中并刚刚开始输入,它将进行最左侧的搜索,突出显示ToString与您键入的内容匹配的所有项目。短时间内的后续按键操作会添加到搜索字符串中(即,键入“ A”后跟“ S”将向左搜索“ AS”,而键入“ A”然后暂停,然后键入“ S”将向左搜索-搜索“ S”。
问题在于这种机制似乎完全依赖于ToString返回的值,在某些情况下,这是我们不能依靠的。还有其他可以代替ToString使用的东西吗?
第二部分是,行为似乎只出现在ListBox中,但是没有其他ItemsControl对象(或诸如TreeView之类的分层对象)。不必从头开始重写该功能,是否有简单的方法添加它到ItemsControl?
您可以控制使用属性TextSearch.Text
或TextSearch.TextPath
附加属性搜索的内容。(请参阅http://msdn.microsoft.com/zh-cn/library/system.windows.controls.textsearch(v=vs.110).aspx)
您可以将TextSearch.TextPath
您的ListBox
实例(所以搜索此属性,而不是ToString
),也可以适用TextSearch.Text
于个别ListBoxItem
孩子(这样你就可以设置各个元素单独的搜索文本)。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Window.Resources>
<XmlDataProvider x:Key="Items" XPath="People">
<x:XData>
<People xmlns="">
<Person Name="John" Surname="Smith" />
<Person Name="Andrew" Surname="Johnson" />
<Person Name="Otis" Surname="Everett" />
<Person Name="Jesus" Surname="Osborn" />
</People>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<StackPanel>
<TextBlock Text="Searches by a property (Name):" />
<ListBox ItemsSource="{Binding Source={StaticResource Items}, XPath=*}"
TextSearch.TextPath="@Name">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding XPath=@Name}" /> <Run Text="{Binding XPath=@Surname}" />
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>Searches by a individual value (number in english):</TextBlock>
<ListBox>
<ListBoxItem TextSearch.Text="One">1</ListBoxItem>
<ListBoxItem TextSearch.Text="Two">2</ListBoxItem>
<ListBoxItem TextSearch.Text="Three">3</ListBoxItem>
<ListBoxItem TextSearch.Text="Four">4</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
这种行为在实现ItemsControl
类(你可以找到其他例子ItemsControl
后裔与搜索:ComboBox
,DataGrid
)。您可以将IsTextSearchEnabled
属性设置为true使其起作用。(请参阅http://msdn.microsoft.com/zh-cn/library/system.windows.controls.itemscontrol.istextsearchenabled(v=vs.110).aspx)
单级搜索适用于TreeView
。我想如果要执行多级搜索,应该以编程方式实现搜索。(请参阅http://social.msdn.microsoft.com/Forums/vstudio/en-US/e6d58fcc-4eaa-4bdc-8621-ce24c8efd330/treeview-textsearch)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句