Aug*_*ust 7 c# windows ui-automation microsoft-ui-automation
我可以看到具有特定自动化ID的元素在Inspect工具中有子项:

但是当我尝试像这样检索它们时:
AutomationElement aPane = mainWindow.FindFirst(TreeScope.Subtree, new PropertyCondition(AutomationElement.AutomationIdProperty, "8264"));
AutomationElementCollection theChildren = aPane.FindAll(TreeScope.Subtree, Condition.TrueCondition);
Run Code Online (Sandbox Code Playgroud)
该aPane元件被正确地恢复,但theChildren元件是空的.出了什么问题?
Mik*_*ray 12
在极少数情况下,我发现Find*调用找不到所有自动化对象.我见过的唯一一致的情况是WPF TextBlock控制,当在数据模板中时,这些调用将找不到它.在这些情况下,您可以尝试RawViewWalker更接近Inspect在内部执行的操作.
public static IEnumerable<AutomationElement> FindInRawView(this AutomationElement root)
{
TreeWalker rawViewWalker = TreeWalker.RawViewWalker;
Queue<AutomationElement> queue = new Queue<AutomationElement>();
queue.Enqueue(root);
while (queue.Count > 0)
{
var element = queue.Dequeue();
yield return element;
var sibling = rawViewWalker.GetNextSibling(element);
if (sibling != null)
{
queue.Enqueue(sibling);
}
var child = rawViewWalker.GetFirstChild(element);
if (child != null)
{
queue.Enqueue(child);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7723 次 |
| 最近记录: |