首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UIA自动化虚拟化控制

使用UIA自动化虚拟化控制
EN

Stack Overflow用户
提问于 2013-06-12 15:15:22
回答 2查看 692关注 0票数 2

我正在尝试用微软的UIA自动化一个特定的控制(Telerik的Rad GridView)。我已经创建了一个包装类,它公开了几个辅助方法供我的测试使用-最突出的例子是返回所有网格行的集合的GetAllRows()方法。

我的问题是,这个特定的控件是虚拟化的,这意味着在任何给定时间,UI中都只呈现和表示可见的行。为了获得所有行,我不得不使用ScrollPattern并反复向下滚动,直到达到100%的滚动,每次都请求所有的子行元素。除了这是非常丑陋的代码之外,我还面临着删除多次拾取的行的问题,这是很复杂的,因为在这个特定的网格中,允许重复的值。

微软建议使用ItemContainer模式,该模式允许在给定条件下请求特定控制下的所有AutomationElements,而不管它们是否被虚拟化。然后,您可以使用VirtualizedItemPattern的Realize()方法将AutomationElement带到视图中并呈现它。

这是可行的,不幸的是,Telerik没有为他们的网格视图实现这个控制模式,即使他们实现了,我也会遇到问题,因为网格行没有获得唯一的AutomationId,这使得很难制定一个ItemContainer模式将利用的条件对象。

有没有人知道如何更优雅地实现这一点?在实现“滚动”方法来呈现行时,我没有问题,但我不想处理删除重复的AutomationElements。

EN

回答 2

Stack Overflow用户

发布于 2013-06-21 00:50:51

为了跟进我自己的问题,我最终只实现了滚动直到获得所有元素的代码。我总是在滚动前保存最后一个元素,从而找出我的实际位置,从而处理重复的值。它并不美观,但它相当通用和可重用。

票数 0
EN

Stack Overflow用户

发布于 2014-04-21 07:36:03

您可以不带条件地使用ItemContainer,逐个实现项,然后像往常一样在代码中测试它们。它可以节省你使用scroll的工作,并等待项目在滚动“本身”后实现。

但是如果没有Telerik,首先要实现模式--恐怕使用scroll是唯一的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17059706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档