如何在ItemsControl中实现自定义内联搜索? - c#

这是两部分的。

首先,在WPF中,标准的ListBox控件自动支持对其项进行内联搜索。它通过使用项目的ToString函数来完成此操作,这意味着如果您将焦点放在列表框内并开始输入,它将进行最左侧的搜索,突出显示ToString与您键入的内容匹配的所有项目。短时间内的后续按键操作将添加到搜索字符串中(即,键入“ A”后跟“ S”将向左搜索“ AS”,而键入“ A”然后暂停,然后键入“ S”则将左键搜索“ S”。

问题在于,这种机制似乎完全依赖于ToString返回的值,在某些情况下,这是我们不能依靠的。还有其他可以代替ToString使用的东西吗?

第二部分是,行为似乎只出现在ListBox中,但是没有其他ItemsControl对象(或诸如TreeView之类的分层对象)。不必从头开始重写该功能,是否有简单的方法添加它到ItemsControl?

参考方案

您可以使用TextSearch.TextTextSearch.TextPath附加属性控制搜索内容。 (请参见http://msdn.microsoft.com/en-us/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后代的其他示例:ComboBoxDataGrid)。您可以将IsTextSearchEnabled属性设置为true使其起作用。 (请参见http://msdn.microsoft.com/en-us/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)

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

CodeIgniter更新查询被执行两次 - php

我正在使用CodeIgniter 2.2。每次访问页面时,我都必须用+1更新数据库。代码可以工作,但是每次都会增加+2。示例:如果是total views=2,则在单击页面后total views应该是3,但是数据库中的值是4。我确定我在控制器中仅调用一次模型add_one_to_view_image。控制者 function view(){ $view_i…

jQuery Ajax文件上传在客户端浏览器上无法正常工作 - javascript

我正在尝试使用Ajax和JQuery实现个人资料图片上传功能我能够将个人资料图片成功上传到我尝试过的所有机器和移动设备上的数据库中。它适用于我在Chrome,Edge,Firefox,Safari甚至Vivaldi上使用。问题是我住在加拿大的客户无法将他们的个人资料图片上传到数据库。另外,纵向宽高比的图像倾向于向侧面旋转。我一直在要求他重​​新注册并多次提供…

将python scikit学习模型导出到pmml - python

我想将python scikit-learn模型导出到PMML。哪个python软件包最合适?我阅读了有关Augustus的内容,但是我无法使用scikit-learn模型找到任何示例。 python大神给出的解决方案 SkLearn2PMML是 JPMML-SkLearn命令行应用程序周围的薄包装。有关受支持的Scikit-Learn Estimator和…