如何使用UIAutomation在WPF(DevExpress框架)中选择ComboBoxItem?

时间:2018-01-03 07:38:22

标签: c# combobox devexpress ui-automation

我已尝试获取所有自动化元素的模式,我可以使用ExpandCollapsePattern,但我无法使用SelectionItemPattern来调用SelectItemPattern。< / p>

例外:

Exception: "Unsupported Pattern"

这是我的代码:

        foreach (AutomationElement a in automationlist)
        {
            if (a.Current.AutomationId == "PersonalCountryCmb")
            {
                ExpandCollapsePattern pattern = (ExpandCollapsePattern)a.GetCurrentPattern(ExpandCollapsePattern.Pattern);
                pattern.Expand();
                try
                {
                    SelectionItemPattern pattern1 = (SelectionItemPattern)a.GetCurrentPattern(SelectionItemPattern.Pattern);
                    pattern1.Select();
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message);
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

如果你在一个组合框上打电话给pattern.Expand();,那么它会list list item,你可以得到如下图所示。

enter image description here

您希望获得list,然后获取所需的list item,并在子项上使用SelectionItemPattern。如果列表很长,您需要通过调用VirtualizedItemPattern来创建Realize()

这是一些希望有用的sudo代码。

    foreach (AutomationElement a in automationlist)
    {
        if (a.Current.AutomationId == "PersonalCountryCmb")
        {
            ExpandCollapsePattern pattern = (ExpandCollapsePattern)a.GetCurrentPattern(ExpandCollapsePattern.Pattern);
            pattern.Expand();

            //Get list
            AutomationElement list = a.FindFirst(TreeScope.Children, new PropertyCondition(
    AutomationElement.LocalizedControlType, "list");

            //Get list item, you will need to replace the condition with something else here
            AutomationElement listItem = a.FindFirst(TreeScope.Children, new PropertyCondition(
    AutomationElement.LocalizedControlType, "list item");

            try
            {
                SelectionItemPattern pattern1 = (SelectionItemPattern)listItem.GetCurrentPattern(SelectionItemPattern.Pattern);
                pattern1.Select();
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }
    }

我不确定DevExpress如何处理他们的子项目,但您可能需要浏览组合框列表的可视化树。例如,我们在我的工作中创建了自己的组合框,并且控件曾经以这样的方式实现,即组合框中的浮动面板属于应用程序的根。