Используя Windows.Automation, могу ли я найти элемент AutomationElement по регулярному выражению?

У меня есть дерево объектов, у которого есть объекты строк в родительской таблице. Я пытаюсь поместить все эти строки в AutomationElementCollection

AutomationElementCollection asdf = ParentTableObj.FindAll
     (
     TreeScope.Children,
     new PropertyCondition
          (
          AutomationElement.NameProperty,
          "I want to use regex here"
          )
     );

Все ряды AutomationElement.NameProperty содержит строку "строка". Тем не менее, они являются вариациями этой строки - например, "Row1", "Row2", "TopRow", ...

Кажется, я что-то упускаю, так как FindAll Метод позволяет определить TreeScope и найти любой AutomationElement, что соответствует предоставленному Condition параметр. Я просто хочу, чтобы мое состояние было неограниченным, так как я уже могу контролировать область поиска с помощью TreeScope,

2 ответа

Решение
//Example :
AutomationElement element = FindFirstDescendant( 
    AutomationElement.FromHandle(windows_hWnd), 
    (ele)=>Regex.IsMatch( ele.Current.Name, pattern)
);

//The generic method to find a descendant element:
public static AutomationElement FindFirstDescendant(AutomationElement element, Func<AutomationElement, bool> condition) {
    var walker = TreeWalker.ControlViewWalker;
    element = walker.GetFirstChild(element);
    while (element != null) {
        if (condition(element))
            return element;
        var subElement = FindFirstDescendant(element, condition);
        if (subElement != null)
            return subElement;
        element = walker.GetNextSibling(element);
    }
    return null;
}

Как указано в документации, вы можете запросить сравнение без учета регистра. Нет флага "регулярное выражение". Вам придется выполнить фильтрацию вручную.

Другие вопросы по тегам