首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutomationPeer,当儿童被删除时更新UIA树

AutomationPeer,当儿童被删除时更新UIA树
EN

Stack Overflow用户
提问于 2014-08-13 10:15:19
回答 1查看 682关注 0票数 2

(这里是UI自动化和WPF的初学者,所以我可能做错了。)

我们有一个自定义控件,它显示要交互查看或编辑的项。在添加UI自动化支持时,我现在使用了OnCreateAutomationPeer的适当实现,并实现了特定于该控件的AutomationPeer。在大多数情况下,事情似乎都很顺利。我可以在UIA树中看到我们的孩子,当我添加孩子时,他们就出现在那里。

从我现在在.NET源代码中看到的情况来看,这棵树的变化是自动的,因为来自WPF内部的每个UpdateLayout都会导致相应的AutomationPeer刷新它们的子树。所以从盒子里看,这些东西很好用。

然而,当删除一个项目时,我的AutomationPeerGetChildrenCore不会被调用,显然是因为当从树中删除Visual时,WPF实际上不需要更新任何东西。这将导致包含不再存在的元素的UIA树。

不过,现在我想知道,总体来说,这是如何运作的。我看到一些控件在发生变化时直接通知它们的AutomationPeer。这可能是条路。或者,我们的自定义控件应该做一些不同的事情,这样布局就会发生,即使某些东西被移除了?

EN

回答 1

Stack Overflow用户

发布于 2020-04-07 23:27:42

对于ItemsControl,我也遇到了类似的问题--我会动态地更新内容,并且它不会刷新子程序以供自动化使用。

在我的用户控件中,我添加了在viewmodel事件上触发的代码,该事件随后在自动化对等点上称为ResetChildrenCache()。我的代码是这样的:

代码语言:javascript
复制
viewModel.DisplayedFaults.CollectionChanged += (sender, args) =>
{
    automationPeer = UIElementAutomationPeer.FromElement(AutomationUiItemsControl);
    if (automationPeer != null)
    {
        automationPeer.ResetChildrenCache();
    }
};

它是基于本文https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/636a37a6-d766-46f8-bafb-d4d9a7816345/wpf-ui-automation-on-a-treeview?forum=windowsaccessibilityandautomation

我发现的另一个与这类相关的有用链接是:Some controls on a page are not visible for MS UI Automation

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

https://stackoverflow.com/questions/25283552

复制
相关文章

相似问题

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