我已尝试获取所有自动化元素的模式,我可以使用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);
}
}
}
答案 0 :(得分:0)
如果你在一个组合框上打电话给pattern.Expand();
,那么它会list
list item
,你可以得到如下图所示。
您希望获得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如何处理他们的子项目,但您可能需要浏览组合框列表的可视化树。例如,我们在我的工作中创建了自己的组合框,并且控件曾经以这样的方式实现,即组合框中的浮动面板属于应用程序的根。