WPF应用程序正在使用应用程序框架,而我都不能编辑它们。

我可以按照以下步骤访问GUI中的每个元素:

IUIItem[] items = window.GetMultiple(SearchCriteria.All);
foreach (var item in items)
{
    visit((dynamic)item);
}


我对正常的控件没有任何问题,但是用CustomUIItem碰壁了。

我想访问它的所有子项,但无法从中创建新的数组IUIItem[]

这是我现在所拥有的:

    void visit(CustomUIItem item)
    {
        AutomationElementCollection children =
            item
            .AutomationElement
            .FindAll(TreeScope.Children, Condition.TrueCondition);
        UIItemCollection temp = new UIItemCollection(children.Cast<AutomationElement>());
        foreach(var t in temp)
        {
            visit((dynamic)t);
        }
    }


这样抛出的东西,大多数时间集合保持空白。

CusomControl在其子级中具有“正常”控件。
我希望这些作为常规IUIItem

在哪里可以找到此文档。
我发现的唯一内容是this,由于我只能从外部访问并且不知道控件的内容,所以我不能这样做。

最佳答案

如果我真的了解你的问题。

    IUIItem[] items = window.GetMultiple(SearchCriteria.All);
    foreach (var item in items)
    {
        visit(item);
    }


我已经更新了您的visit()方法,现在它以IUItem作为参数来允许访问普通和自定义控件。

    public void visit(IUIItem item)
    {
        if (item is CustomUIItem)
        {
            // Process custom controls
            CustomUIItem customControl = item as CustomUIItem;

            // Retrieve all the child controls
            IUIItem[] items = customControl.AsContainer().GetMultiple(SearchCriteria.All);

            // visit all the children
            foreach (var t in items)
            {
                visit(t);
            }
            ...
        }
        else
        {
            // Process normal controls
            ...
        }
    }

关于c# - 在TestStack.White中为CustomUIItem的子级获取IUIItem [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41881079/

10-13 05:53