Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Замечание
Эта документация предназначена для разработчиков .NET Framework, которые хотят использовать управляемые классы автоматизации пользовательского интерфейса, определенные в пространстве имен System.Windows.Automation. Последние сведения об автоматизации пользовательского интерфейса см. в разделе API автоматизации Windows: автоматизация пользовательского интерфейса.
В этом обзоре описывается, как служба автоматизации пользовательского интерфейса Майкрософт предоставляет внедренные объекты или дочерние элементы в текстовом документе или контейнере.
В службе автоматизации пользовательского интерфейса внедренный объект — это любой элемент, имеющий нетекстовые границы; Например, изображение, гиперссылка, таблица или тип документа, например электронная таблица Microsoft Excel или файл Microsoft Windows Media. Это отличается от стандартного определения, в котором элемент создается в одном приложении и внедряется или связан в другом. Может ли объект изменяться в исходном приложении, не имеет значения в контексте автоматизации пользовательского интерфейса.
Внедренные объекты и дерево модели автоматизации пользовательского интерфейса
Внедренные объекты обрабатываются как отдельные элементы в представлении контроля дерева автоматизации пользовательского интерфейса. Они предоставляются как дочерние элементы текстового контейнера, чтобы их можно было получить через ту же модель, что и другие элементы управления в UI Automation.
Пример текстового контейнера с внедренными объектами таблицы, изображения и гиперссылки
Пример представления содержимого для части предыдущего текстового контейнера
Предоставление внедренных объектов с помощью TextPattern и TextPatternRange
При совместном использовании, класс шаблона элемента управления TextPattern и класс TextPatternRange предоставляют методы и свойства, которые упрощают навигацию и запросы внедренных объектов.
Текстовое содержимое (или внутренний текст) текстового контейнера и внедренного объекта, например гиперссылки или ячейки таблицы, предоставляется как один непрерывный текстовый поток как в представлении управления, так и в содержимом дерева автоматизации пользовательского интерфейса. Границы объектов игнорируются. Если клиент службы автоматизации пользовательского интерфейса извлекает текст для цели декламации, интерпретации или анализа, диапазон текста должен быть проверен на наличие специальных случаев, таких как таблица с текстовым содержимым или другие встроенные объекты. Это можно сделать, вызвав GetChildren для получения AutomationElement для каждого встроенного объекта, а затем вызвав RangeFromChild для получения текстового диапазона для каждого элемента. Это выполняется рекурсивно, пока не будет получено все текстовое содержимое.
Пример текстового потока со встроенными объектами и их диапазонами
Если необходимо пройти по содержимому текстового диапазона, ряд шагов выполняется за кулисами, чтобы Move метод успешно выполнялся.
Диапазон текста приводится к нормализованному виду; то есть текстовый диапазон свернут до выродившегося диапазона в конечной точке Start, что делает конечную точку End избыточной. Этот шаг необходим для удаления неоднозначности в ситуациях, когда диапазон текста охватывает TextUnit границы: например,
{The URL https://www.microsoft.com is embedded in textгде "{" и "}" являются конечными точками текстового диапазона.Результирующий диапазон перемещается назад к началу запрошенной DocumentRange границы.
Диапазон перемещается вперед или назад в DocumentRange по запрашиваемому числу TextUnit границ.
Затем диапазон расширяется из состояния дегенерированного диапазона путем перемещения End конечной точки по одной запрошенной TextUnit границе.
Примеры изменения диапазона текста для Move() и ExpandToEnclosingUnit()
Распространенные сценарии
В следующих разделах приведены примеры наиболее распространенных сценариев, которые включают внедренные объекты.
Условные обозначения для приведенных ниже примеров:
{ = Start
} = End
Гиперссылка
Пример 1. Текстовый диапазон, содержащий внедренную текстовую гиперссылку
{The URL https://www.microsoft.com is embedded in text}.
| Вызываемый метод | Результат |
|---|---|
| GetText | Возвращает строку The URL https://www.microsoft.com is embedded in text. |
| GetEnclosingElement | Возвращает самый внутренний AutomationElement, который включает диапазон текста; в этом случае — AutomationElement, представляющий сам текстовый провайдер. |
| GetChildren | Возвращает AutomationElement, представляющий собой элемент управления гиперссылкой. |
RangeFromChild где AutomationElement объект возвращается предыдущим GetChildren методом. |
Возвращает диапазон, представляющий https://www.microsoft.com. |
Пример 2. Текстовый диапазон, частично охватывающий внедренную текстовую гиперссылку
URL-адрес https://{[www]} внедрен в текст.
| Вызываемый метод | Результат |
|---|---|
| GetText | Возвращает строку "www". |
| GetEnclosingElement | Возвращает внутреннюю область AutomationElement, которая охватывает текстовый диапазон; в этом случае это контрол гиперссылки. |
| GetChildren | Возвращается null , так как текстовый диапазон не охватывает всю строку URL-адреса. |
Пример 3. Текстовый диапазон, частично охватывающий содержимое текстового контейнера. В текстовом контейнере есть встроенная текстовая гиперссылка, которая не входит в текстовый диапазон.
{The URL} [https://www.microsoft.com](https://www.microsoft.com) is embedded in text.
| Вызываемый метод | Результат |
|---|---|
| GetText | Возвращает строку "URL-адрес". |
| GetEnclosingElement | Возвращает самый внутренний AutomationElement, который включает диапазон текста; в этом случае — AutomationElement, представляющий сам текстовый провайдер. |
| Move с параметрами (TextUnit.Word, 1). | Перемещает диапазон текста на http, так как текст гиперссылки состоит из отдельных слов. В этом случае гиперссылка не рассматривается как один объект. URL-адрес {[http]} внедрен в текст. |
Изображение
Пример 1. Текстовый диапазон, содержащий внедренное изображение
{Изображение
встроено в текст}.
| Вызываемый метод | Результат |
|---|---|
| GetText | Возвращает строку "Внедрено в текст". Невозможно ожидать, что любой замещающий текст, связанный с изображением, будет включен в текстовый поток. |
| GetEnclosingElement | Возвращает самый внутренний AutomationElement, который включает диапазон текста; в этом случае — AutomationElement, представляющий сам текстовый провайдер. |
| GetChildren | Возвращает AutomationElement, представляющий управление изображениями. |
| RangeFromChild где AutomationElement объект возвращается предыдущим GetChildren методом. | Возвращает вырожденный диапазон, представляющий " ". |
Пример 2. Текстовый диапазон, частично охватывающий содержимое текстового контейнера. В текстовом контейнере есть внедренное изображение, которое не входит в текстовый диапазон.
{Изображение}
внедрен в текст.
| Вызываемый метод | Результат |
|---|---|
| GetText | Возвращает строку "Изображение". |
| GetEnclosingElement | Возвращает самый внутренний AutomationElement, который включает диапазон текста; в этом случае — AutomationElement, представляющий сам текстовый провайдер. |
| Move с параметрами (TextUnit.Word, 1). | Перемещает диапазон охвата текста к "is ". Так как только текстовые встроенные объекты считаются частью текстового потока, изображение в этом примере не влияет на функцию Move или её возвращаемое значение (1 в данном случае). |
Таблица
Таблица, используемая для примеров
| Ячейка с изображением | Ячейка с текстом |
|---|---|
|
X |
|
У |
Изображение для Z |
Z |
Пример 1. Получение текстового контейнера из содержимого ячейки.
| Метод вызван | Результат |
|---|---|
| GetItem с параметрами (0,0) | AutomationElement Возвращает содержимое ячейки таблицы. В этом случае элемент является текстовым элементом управления. |
RangeFromChild где AutomationElement объект возвращается предыдущим GetItem методом. |
Возвращает диапазон, охватывающий изображение . |
GetEnclosingElement для объекта, возвращаемого предыдущим RangeFromChild методом. |
AutomationElement Возвращает ячейку таблицы. В этом случае элемент является текстовым элементом управления, поддерживающим TableItemPattern. |
GetEnclosingElement для объекта, возвращаемого предыдущим GetEnclosingElement методом. |
Возвращает AutomationElement, представляющий таблицу. |
GetEnclosingElement для объекта, возвращаемого предыдущим GetEnclosingElement методом. |
Возвращает объект AutomationElement , представляющий сам поставщик текста. |
Пример 2. Получение текстового содержимого ячейки.
| Метод вызван | Результат |
|---|---|
| GetItem с параметрами (1,1). | AutomationElement Возвращает содержимое ячейки таблицы. В этом случае элемент является текстовым элементом управления. |
RangeFromChild где AutomationElement объект возвращается предыдущим GetItem методом. |
Возвращает "Y". |
См. также
- TextPattern
- TextPatternRange
- ITextProvider
- ITextRangeProvider
- Доступ к внедренным объектам с помощью автоматизации пользовательского интерфейса
- Предоставление содержимого таблицы с помощью автоматизации пользовательского интерфейса
- Перемещение по тексту с помощью UI Automation
- Пример работы с TextPattern: поиск и выделение