我尝试实现一种方法,从启用虚拟化的ListView中获取所有项目以进行测试。但显然,尽管微软声称自WPF 4支持虚拟化以来的所有控制都必须实现VirtualizedItemPattern,这样开发人员才能从容器中获取所有项目,而无需隐式滚动容器。
我的简单WPF应用程序在Window元素中有ListView项,并添加在代码隐藏的100个元素中。根据{{3}},我的期望是我能够从ListView获取VirtualizedItemPattern并调用Realize()方法使虚拟项完全可以作为UI Automation元素访问。但尝试这样做会引发“不受支持的模式”#34;异常。
嗯,接下来我的想法就像,也许我在选择一个项目容器时犯了一个错误,并意识到我试过的那些容器都不支持这个"功能"。
此时,我完全陷入困境,因为没有关于此的文档,也没有任何示例。这个功能怎么了?它被淘汰了吗?任何操作系统/某些限制(我试过W7和W10)?
更新: 我尝试填充ListView的方式:
var _list = Enumerable.Range(0, 100).Select(i => i.ToString());
foreach (var item in _list)
{
List.Items.Add(item);
}
然后我认为问题可能在于我如何填充控件,所以我决定尝试使用ItemsSource
List.ItemsSource = _list;
在这两种情况下,我得到了相同的结果 - 无法通过UI自动化框架获取所有项目。