我正在使用 WPF 来显示复杂的数据(想想报告)。我现在需要对其进行全文搜索。我们目前通过遍历可视化树来寻找文本块来做到这一点。看来这需要在UI线程上完成,是吗?这里的问题是,在整个 UI 块期间找到下一个匹配项可能需要相当长的时间。
有没有办法绕过这个问题?我可以尝试使用 UI 自动化,但是一旦找到匹配项,我该如何突出显示它?使用 UI 自动化我没有得到对 UI 元素的实际对象实例的引用,因此我不能在它上面放置一个装饰器。
WPF中的全文搜索通常是如何实现的?XPS 查看器是如何做到的?
我正在使用 WPF 来显示复杂的数据(想想报告)。我现在需要对其进行全文搜索。我们目前通过遍历可视化树来寻找文本块来做到这一点。看来这需要在UI线程上完成,是吗?这里的问题是,在整个 UI 块期间找到下一个匹配项可能需要相当长的时间。
有没有办法绕过这个问题?我可以尝试使用 UI 自动化,但是一旦找到匹配项,我该如何突出显示它?使用 UI 自动化我没有得到对 UI 元素的实际对象实例的引用,因此我不能在它上面放置一个装饰器。
WPF中的全文搜索通常是如何实现的?XPS 查看器是如何做到的?
您是正确的,查询可视化树必须在 UI 线程上完成,而且 UI 自动化只能以与坐在计算机前的人类似的方式与应用程序交互,因此它无权访问实际控制(就像人没有)。
解决此问题的正确方法是将 UI 放在一边,然后在数据源(MVVM 中的模型)中搜索文本。毕竟,您确实想要搜索 UI 显示的信息,而不是 UI 本身。
wpf 自动将 inotifypropertychanged 编组到 ui 线程上,以便您可以在另一个线程上进行处理并设置属性。你如何做到这一点取决于你的代码结构。例如,您使用 mvvm 吗?如果不是,您可能需要使用调度程序来调用您的用户界面上的任何方法。如果您回复有关您的代码结构的更多信息,我应该能够提供更明确的答案。如果您不使用 mvvm,如果您将 wpf 数据绑定与可以进行处理的非 ui 数据源一起使用,您仍然可以避免显式编组。