Поделиться через


Как модель автоматизации пользовательского интерфейса предоставляет внедренные объекты

В этом разделе описывается, как microsoft модель автоматизации пользовательского интерфейса использует шаблоны элементов управления Text и TextRange для предоставления внедренных объектов (дочерних или потомков) в текстовом документе или контейнере.

Для модель автоматизации пользовательского интерфейса внедренный объект — это любой элемент, имеющий нетекстовые границы, такие как изображение, гиперссылка, таблица или тип документа (электронная таблица Microsoft Excel, файл Microsoft Windows Media и т. д.).

Примечание.

Это отличается от определения OLE компонентной объектной модели (COM) (см . внедренные объекты), где элемент создается в одном приложении и внедрен или связан в другом приложении. Может ли объект изменяться в исходном приложении, не имеет значения в контексте модель автоматизации пользовательского интерфейса.

Внедренные объекты и дерево модели автоматизации пользовательского интерфейса

Внедренные объекты рассматриваются как отдельные элементы в представлении элемента управления дерева модель автоматизации пользовательского интерфейса. Они предоставляются как дочерние элементы текстового контейнера, чтобы их можно было получить через ту же объектную модель, что и другие элементы управления в модель автоматизации пользовательского интерфейса.

В следующей таблице перечислены примеры элементов контейнера и неконтейнеров.

Элементы контейнера

Неконтейнерные элементы

  • Календарь
  • Combobox
  • DataGrid
  • Документ
  • Изменить
  • Групповой
  • Верхний колонтитул
  • HeaderItem
  • List
  • Меню
  • MenuBar
  • навигации
  • SplitButton
  • Вкладка
  • Таблица
  • Панель инструментов
  • декомпозиции
  • TreeItem
  • Окно
  • Ссылка
  • CheckBoxes
  • Кнопка

На следующем рисунке показан текстовый контейнер (документ) со встроенной таблицей и изображением.

иллюстрация, показывающая документ со встроенной таблицей и изображением

Представление содержимого модель автоматизации пользовательского интерфейса предыдущего документа показано на следующей схеме.

схема представления содержимого автоматизации пользовательского интерфейса документа с внедренными объектами

Внедренные объекты "Совместимый" и "Несовместимый"

Некоторые поставщики модель автоматизации пользовательского интерфейса используют то же текстовое хранилище для каждого объекта TextPattern, который они содержат. Объекты, поддерживаемые тем же текстовым хранилищем, что и их контейнер, называются "совместимыми" внедренными объектами. Эти объекты могут быть объектами TextPattern и, в данном случае, их текстовые диапазоны сравнимы с текстовыми диапазонами, полученными из контейнера. Это позволяет поставщикам предоставлять клиентские сведения об отдельных объектах TextPattern, как если бы они были одним, большим текстовым поставщиком.

Однако поставщики могут использовать различные текстовые хранилища для различных объектов TextPattern, внедренных в контейнер TextPattern. Объекты, не поддерживаемые текстовым хранилищем контейнера, называются "не совместимыми" внедренными объектами. Эти типы внедренных объектов могут быть или не могут быть объектами на основе TextPattern.

В следующей таблице перечислены некоторые примеры совместимых и несовместимых внедренных объектов.

Объект Совместимые внедренные объекты Не совместимые внедренные объекты
Внедренные объекты non-TextPattern Кнопка в Microsoft Edge
Таблица данных в Microsoft Edge
Кнопка в RichTextBlock в платформе XAML Майкрософт
Изображения с замещающий текст в Microsoft Edge
ListView с ListItems в RichTextBlock в платформе XAML Майкрософт
Внедренные объекты TextPattern Элемент управления входным вводом типа "text" в Microsoft Edge
Таблица в документе Word
Элемент TextBox в документе Microsoft Word

Предоставление внедренных объектов

Шаблоны элементов управления Text и TextRange предоставляют свойства и методы, упрощающие навигацию и запросы внедренных объектов.

Текстовое содержимое (или внутренний текст) текстового контейнера и внедренного объекта, например гиперссылки или ячейки таблицы, предоставляется как один непрерывный текстовый поток в представлении элемента управления, так и в представлении содержимого дерева модель автоматизации пользовательского интерфейса; границы объектов игнорируются. Если клиент модель автоматизации пользовательского интерфейса извлекается текст для чтения, интерпретации или анализа каким-либо образом, диапазон текста должен проверяться для особых случаев, таких как таблица с текстовым содержимым или другими внедренными объектами. Вызовите интерфейс IUIAutomationTextRange::GetChildren, чтобы получить интерфейс IUIAutomationElement для каждого внедренного объекта, а затем вызвать IUIAutomationTextPattern::RangeFromChild, чтобы получить текстовый диапазон для каждого элемента. Это выполняется рекурсивно, пока не будет получено все текстовое содержимое.

Примечание.

Дегенерированный (или свернутый) диапазон заключается в том, что начальная конечная точка и конечная точка совпадают. Дегенерации диапазонов часто используются для указания положения текстового курсора с помощью методов GetSelection и GetCaretRange.

На следующей схеме показан текстовый поток со встроенными объектами и их диапазонами.

схема, показывающая текстовый поток со внедренными объектами и их диапазонами

Внедренные объекты и TextUnit

Объект ITextProvider можно пройти по указанному объекту TextUnit. Поставщики, содержащие внедренные объекты, могут проходить точно так же, но внедренные объекты влияют на обход. Ниже приведены некоторые моменты, которые следует учитывать:

  • Любой не совместимый внедренный объект представлен символом замены U+FFFC в текстовом хранилище элемента контейнера TextPattern. Он также считается единицей символов и единицей слова.
  • Совместимые внедренные объекты могут состоять из нескольких символов и слов.
  • Вложенный элемент — это самый нижний элемент, охватывающий весь текстовый диапазон.
  • Дочерние элементы диапазона также являются дочерними элементами элемента контейнера, частично или полностью заключенного в диапазон.
  • В идеале (особенно в случае элементов контейнера, таких как Таблица), граница слова не выходит за пределы границы объекта. В следующем примере блок слова "Панель" не содержит текстовой позиции, которая находится за пределами </td> тега (<br \> не является частью слова "Панель").
<table style="width:100%">
  <tr>
    <th>Name</th>
    <th>Notes</th>
  </tr>
  <tr>
    <td>Eve Jackson</td>
    <td>Foo Bar</td>
  </tr>
</table>
<br/>
  • В целом, рассматривается как отдельное слово, <br \> которое не выходит за границу линии.
  • Исключение из предыдущего правила заключается в том, что текстовое подразделение Word содержит полные объекты внутри себя. Например, <p>Hello <a href="#">link</a> here.</p>в том числе встроенные контейнеры, есть слова "Hello", "ссылка" и "здесь". Где "link" имеет объект TextPattern в качестве включающего элемента и объект ссылки в качестве дочернего объекта.
  • В случае единиц символов объект является вложенным элементом (текстовые единицы, подобные этому, не должны иметь дочерних элементов).
  • Объекты заметки не должны представляться как внедренный объект. Например, наличие других описателей авторов в совместном документе.
  • Внедренные объекты занимают по крайней мере одну позицию курсора, заметка — это только метаданные.
  • Каждая граница объекта (начало и конец) представлена разрывом формата в диапазоне документов TextPattern.
  • Для HTML каждый html-тег не обязательно приводит к модель автоматизации пользовательского интерфейса объекту. Например, содержимое в тегах выделения не должно быть представлено как элемент, а текстовый поток, в котором UIA_IsItalicAttributeId возвращает ЗНАЧЕНИЕ TRUE.
  • Конечная точка запуска является инклюзивной и является предпочтительной конечной точкой, а конечная точка является эксклюзивной. Это полезно, если диапазон дегенерируется, а конечные точки start и end принадлежат к той же позиции для этого диапазона.

Сравнение внедренных объектов

Вложенные объекты TextPattern, которые находятся в аналогичной дочерней связи и совместно используют то же резервное текстовое хранилище, называются сопоставимыми. В этом случае диапазоны от любого из объектов TextPattern можно сравнить с помощью ITextRangeProvider::Compare и ITextRangeProvider::Compare и ITextRangeProvider::CompareEndpoints. Оба результата имеют допустимое числовое значение, указывающее их относительную позицию.

Объект, встраиваемый в объект TextPattern, сравнивается с TextPattern, если объект имеет допустимый диапазон в TextPattern (ITextProvider::RangeFromChild), а содержимое, лежащее в диапазоне текста, не является пустым и не является замещаемым символом.

Внедренные объекты TextPattern и DocumentUnit

Для внедренных объектов TextPattern единица Document распознает только содержимое, содержащееся в этом элементе.

Иерархия элементов Word TextPattern

  • Элемент документа реализует TextPattern и Document возвращает весь диапазон документов Word.
  • Отдельные страницы документа реализуют TextPattern и Document , возвращают содержимое этих отдельных страниц (несмотря на то, что страницы совместно используют одно и то же текстовое хранилище со всем документом TextPattern).

Элементы управления вводом веб-страниц и текста в Edge

  • Основной элемент области веб-страниц реализует TextPattern и предоставляет все содержимое веб-страницы.
  • Отдельные элементы управления вводом текста поддерживают TextPattern, где диапазон документов представляет текст, содержащийся в каждом поле ввода (даже если они используют одно и то же текстовое хранилище со всей веб-страницей).

Распространенные сценарии

В этом разделе представлены примеры распространенных сценариев, которые включают внедренные объекты: гиперссылки, изображения и таблицы. В следующих примерах левая скобка ({) представляет конечную точку начального диапазона текста, а правая скобка (}) представляет конечную точку end.

Следующий текстовый диапазон содержит внедренную текстовую гиперссылку.

{URL-адрес https://www.microsoft.com внедрен в текст}.

Вызов методов IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren и IUIAutomationTextPattern::RangeFromChild приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationTextRange::GetText Возвращает строку "URL-адрес https://www.microsoft.com внедрен в текст".
IUIAutomationTextRange::GetEnclosingElement Возвращает самый внутренний элемент модель автоматизации пользовательского интерфейса, который заключает текстовый диапазон, в данном случае элемент автоматизации, представляющий сам поставщик текста.
IUIAutomationTextRange::GetChildren Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий элемент управления гиперссылкой.
IUIAutomationTextPattern::RangeFromChild, где элемент модель автоматизации пользовательского интерфейса был возвращен предыдущим методом IUIAutomationTextRange::GetChildren. Возвращает диапазон, представляющий "https://www.microsoft.com".

Следующий текстовый диапазон частично охватывает внедренную текстовую гиперссылку.

URL-адрес https://{www} внедрен в текст.

Вызов методов IUIAutomationTextRange::GetText, GetEnclosingElement и GetChildren приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationTextRange::GetText Возвращает строку "www".
IUIAutomationTextRange::GetEnclosingElement Возвращает самый внутренний элемент модель автоматизации пользовательского интерфейса, который заключает текстовый диапазон; в данном случае элемент управления гиперссылки.
IUIAutomationTextRange::GetChildren Возвращает значение NULL , так как текстовый диапазон не охватывает всю строку URL-адреса.

Следующий диапазон текста частично охватывает содержимое текстового контейнера. В контейнере текста есть внедренная текстовая гиперссылка, которая не является частью текстового диапазона.

{URL-адрес} https://www.microsoft.com внедрен в текст.

Вызов методов IUIAutomationTextRange::GetText, GetEnclosingElement и Move приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationTextRange::GetText Возвращает строку "URL-адрес".
IUIAutomationTextRange::GetEnclosingElement Возвращает самый внутренний элемент модель автоматизации пользовательского интерфейса, который заключает текстовый диапазон, в данном случае элемент, представляющий сам поставщик текста.
IUIAutomationTextRange::Move Перемещает диапазон текста на "https://", так как текст гиперссылки состоит из отдельных слов. В этом случае гиперссылка не рассматривается как один объект.
URL-адрес {http} внедрен в текст.

Пример изображения 1. Текстовый диапазон, содержащий внедренное изображение

Следующий текстовый диапазон содержит внедренное изображение шаттла.

{Изображение иллюстрация шаттла внедрен в текст}.

Вызов методов IUIAutomationTextRange::GetText, GetEnclosingElement, GetChildren и IUIAutomationTextPattern::RangeFromChild приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationTextRange::GetText Возвращает строку "Изображение внедрено в текст". Любой замещающий текст, связанный с изображением, не включен в текстовый поток.
IUIAutomationTextRange::GetEnclosingElement Возвращает самый внутренний элемент модель автоматизации пользовательского интерфейса, который заключает текстовый диапазон, в данном случае элемент, представляющий сам поставщик текста.
IUIAutomationTextRange::GetChildren Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий элемент управления изображением.
IUIAutomationTextPattern::RangeFromChild, где элемент модель автоматизации пользовательского интерфейса был возвращен предыдущим методом IUIAutomationTextRange::GetChildren. Возвращает дегенерный диапазон.

Пример изображения 2. Текстовый диапазон, частично охватывающий содержимое текстового контейнера

Следующий диапазон текста частично охватывает содержимое текстового контейнера. В текстовом контейнере есть внедренное изображение, которое не входит в текстовый диапазон.

{Изображение} иллюстрация шаттла внедрен в текст.

Вызов методов IUIAutomationTextRange::GetText, GetEnclosingElement и Move приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationTextRange::GetText Возвращает строку "Изображение".
IUIAutomationTextRange::GetEnclosingElement Возвращает самый внутренний элемент модель автоматизации пользовательского интерфейса, который заключает текстовый диапазон, в данном случае элемент, представляющий сам поставщик текста.
IUIAutomationTextRange::Move с параметрами (TextUnit_Word, 2). Перемещает текстовый диапазон к "is". Так как только текстовые внедренные объекты считаются частью текстового потока, изображение в этом примере не влияет на IUIAutomationTextRange::Move или его возвращаемое значение, в данном случае 2.

Таблица

Пример таблицы 1. Получение текстового контейнера из содержимого ячейки

В следующей таблице возвращается текстовый контейнер из содержимого ячейки.

Ячейка с изображением Ячейка с текстом
иллюстрация шаттла X
иллюстрация пространства и телескопа Y
иллюстрация микроскопа Z

Вызов методов IUIAutomationGridPattern::GetItem, IUIAutomationTextPattern::RangeFromChild и IUIAutomationTextRange::GetEnclosingElement приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationGridPattern::GetItem с параметрами (0, 0). Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий содержимое ячейки таблицы, в данном случае элемент является текстовым элементом управления.
iuiautomationtextpattern::rangefromchild возвращает диапазон изображения иллюстрация шаттла.
GetEnclosingElement для объекта, возвращаемого предыдущим методом IUIAutomationTextPattern::RangeFromChild. Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий ячейку таблицы. В этом случае элемент является текстовым элементом управления, поддерживающим шаблон элемента управления TableItem .
IUIAutomationTextRange::GetEnclosingElement для объекта, возвращаемого предыдущим методом GetEnclosingElement. Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий таблицу.
IUIAutomationTextRange::GetEnclosingElement для объекта, возвращаемого предыдущим методом GetEnclosingElement. Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий сам поставщик текста.

Пример таблицы 2. Возвращает текстовое содержимое ячейки

Таблица в предыдущем примере получает текстовое содержимое ячейки.

Вызов методов IUIAutomationGridPattern::GetItem и IUIAutomationTextPattern::RangeFromChild приводит к поведению, описанным в следующей таблице.

Вызываемый метод Результат
IUIAutomationGridPattern::GetItem с параметрами (1,1). Возвращает элемент модель автоматизации пользовательского интерфейса, представляющий содержимое ячейки таблицы. В этом случае элемент является текстовым элементом управления.
IUIAutomationTextPattern::RangeFromChild, где элемент модель автоматизации пользовательского интерфейса является объектом, возвращаемым предыдущим методом IUIAutomationGridPattern::GetItem. Возвращает "Y".

При перемещении документа по TextUnit_Line, если текстовый диапазон вводит внедренную таблицу, каждая строка текста в ячейке должна рассматриваться как строка.

Основные понятия