Некоторые элементы управления на странице не видны для MS UI Automation.

У нас есть приложение с StartPage.xaml, где шаблон элемента управления для TabControl определяет некоторые сетки и панели стека. В этом шаблоне в середине xaml есть itemPresenter, а под ним панель стека. Хотя это прекрасно работает для пользователя, автоматизация MS UI может видеть только элементы вкладок внутри презентатора элементов и ничего больше, что определено на том же уровне в шаблоне. Я попытался добавить стандартную кнопку внутри панели стека, которую MS UIA не видит, чтобы проверить, связана ли эта проблема с пользовательскими элементами управления, которые у нас есть, но эта стандартная кнопка также не видна для MS UIA. Если я использую Snoop, я могу видеть все элементы из шаблона в дереве snoop на соответствующих уровнях иерархии шаблонов. Но МС МАУ до сих пор не может их найти.

Что может пойти не так с элементами управления, которые не позволят MS UIA найти их на странице?


person DarkDeny    schedule 28.05.2013    source источник


Ответы (1)


Наконец-то я смог обнаружить проблему. TabControl был шаблонизирован с кучей различных элементов управления, в то время как AutomationPeer остался прежним, который знает только о TabItems как о дочерних элементах TabControl. Я создал подкласс TabControl и переопределил OnCreateAutomation, чтобы создать и вернуть мой GenericAutomationPeer, который может перечислять все дочерние UIElement этого элемента управления, и вуаля — UIA Verify теперь может видеть эти дополнительные элементы управления из шаблона TabControl.

Реализация GenericAutomationPeer была найдена здесь: http://www.colinsalmcorner.com/2011/11/genericautomationpeer-helping-coded-ui.html Большое спасибо автору этой статьи!

person Community    schedule 29.05.2013