Compartilhar via


Visão Geral de TextPattern e Objetos Incorporados

Observação

Esta documentação destina-se a desenvolvedores do .NET Framework que desejam usar as classes de Automação de Interface do Usuário gerenciadas definidas no namespace System.Windows.Automation. Para obter as informações mais recentes sobre Automação de Interface do Usuário, consulte API de Automação do Windows: Automação de Interface do Usuário.

Essa visão geral descreve como a Automação da Interface do Usuário da Microsoft expõe objetos inseridos ou elementos filho em um documento de texto ou contêiner.

Na Automação da Interface do Usuário, um objeto inserido é qualquer elemento que tenha limites não textuais; por exemplo, uma imagem, hiperlink, tabela ou tipo de documento, como uma planilha do Microsoft Excel ou um arquivo do Microsoft Windows Media. Isso difere da definição padrão, em que um elemento é criado em um aplicativo e inserido, ou vinculado, dentro de outro. Se o objeto pode ser editado em seu aplicativo original é irrelevante no contexto da Automação da Interface do Usuário.

Objetos inseridos e a árvore de automação da interface do usuário

Objetos inseridos são tratados como elementos individuais dentro da exibição de controle da árvore de Automação da Interface do Usuário. Eles são expostos como filhos do contêiner de texto para que possam ser acessados por meio do mesmo modelo que outros controles na Automação da Interface do Usuário.

Tabela inserida com imagem em um contêiner de texto Exemplo de um contêiner de texto com objetos inseridos de tabela, imagem e hiperlink

Exibição de conteúdo do exemplo anterior Exemplo da exibição de conteúdo de uma parte do contêiner de texto anterior

Expor objetos inseridos usando TextPattern e TextPatternRange

Usada em conjunto, a TextPattern classe de padrão de controle e a TextPatternRange classe expõem métodos e propriedades que facilitam a navegação e a consulta de objetos inseridos.

O conteúdo textual (ou texto interno) de um contêiner de texto e um objeto inserido, como um hiperlink ou célula de tabela, é exposto como um único fluxo de texto contínuo no modo de exibição de controle e na exibição de conteúdo da árvore de Automação da Interface do Usuário; os limites de objeto são ignorados. Se um cliente de Automação de Interface do Usuário estiver recuperando o texto com a finalidade de recitar, interpretar ou analisar de alguma forma, o intervalo de texto deverá ser verificado quanto a casos especiais, como uma tabela com conteúdo textual ou outros objetos inseridos. Isso pode ser feito chamando GetChildren para obter um AutomationElement para cada objeto inserido e, em seguida, chamando RangeFromChild para obter um intervalo de texto para cada elemento. Isso é feito recursivamente até que todo o conteúdo textual seja recuperado.

Intervalos de texto estendidos por objetos inseridos. Exemplo de um fluxo de texto com objetos inseridos e seus intervalos

Quando é necessário percorrer o conteúdo de um intervalo de texto, uma série de etapas são envolvidas nos bastidores para que o Move método seja executado com êxito.

  1. O intervalo de texto é normalizado, ou seja, ele é recolhido a um intervalo degenerado no ponto de extremidade Start, tornando o ponto de extremidade End supérfluo. Essa etapa é necessária para remover a ambiguidade em situações em que um intervalo de texto abrange TextUnit limites: por exemplo, {The URL https://www.microsoft.com is embedded in text em que "{" e "}" são os pontos de extremidade do intervalo de texto.

  2. O intervalo resultante é movido para trás no DocumentRange até o início do limite solicitado TextUnit.

  3. O intervalo é movido para frente ou para trás no DocumentRange pelo número solicitado de limites TextUnit.

  4. Em seguida, o intervalo é expandido de um estado de intervalo degenerado movendo o ponto de extremidade End um limite TextUnit solicitado.

Ajustes de intervalo por Move & ExpandToEnclosingUnit Exemplos de como um intervalo de texto é ajustado para Move() e ExpandToEnclosingUnit()

Cenários comuns

As seções a seguir apresentam exemplos dos cenários mais comuns que envolvem objetos inseridos.

Legenda para os exemplos mostrados:

{ = Start

} = End

Exemplo 1 - Um intervalo de texto que contém um hiperlink de texto inserido

{The URL https://www.microsoft.com is embedded in text}.

Método chamado Resultado
GetText Retorna a cadeia de caracteres The URL https://www.microsoft.com is embedded in text.
GetEnclosingElement Retorna o AutomationElement mais interno que inclui o intervalo de texto; nesse caso, o AutomationElement que representa o próprio provedor de texto.
GetChildren Retorna um AutomationElement que representa o controle de hiperlink.
RangeFromChild onde AutomationElement está o objeto retornado pelo método anterior GetChildren . Retorna o intervalo que representa https://www.microsoft.com.

Exemplo 2 - Um intervalo de texto que abrange parcialmente um hiperlink de texto inserido

A URL https://{[www]} está inserida no texto.

Método chamado Resultado
GetText Retorna a cadeia de caracteres "www".
GetEnclosingElement Retorna o AutomationElement mais interno que inclui o intervalo de texto; nesse caso, o controle de hiperlink.
GetChildren Retorna null uma vez que o intervalo de texto não abrange toda a cadeia de caracteres de URL.

Exemplo 3 - Um intervalo de texto que abrange parcialmente o conteúdo de um contêiner de texto. O contêiner de texto tem um hiperlink de texto inserido que não faz parte do intervalo de texto.

{The URL} [https://www.microsoft.com](https://www.microsoft.com) is embedded in text.

Método chamado Resultado
GetText Retorna a cadeia de caracteres "The URL".
GetEnclosingElement Retorna o AutomationElement mais interno que inclui o intervalo de texto; nesse caso, o AutomationElement que representa o próprio provedor de texto.
Move com parâmetros de (TextUnit.Word, 1). Move o intervalo de texto para "http", pois o texto do hiperlink é composto por palavras individuais. Nesse caso, o hiperlink não é tratado como um único objeto.

A URL {[http]} está inserida no texto.

Imagem

Exemplo 1 – Um intervalo de texto que contém uma imagem inserida

A imagem Exemplo de Imagem Inserida está inserida no texto.

Método chamado Resultado
GetText Retorna a cadeia de caracteres "The is embedded in text". Nenhum texto ALT associado à imagem não pode ser incluído no fluxo de texto.
GetEnclosingElement Retorna o AutomationElement mais interno que inclui o intervalo de texto; nesse caso, o AutomationElement que representa o próprio provedor de texto.
GetChildren Retorna um AutomationElement que representa o controle de imagem.
RangeFromChild onde AutomationElement está o objeto retornado pelo método anterior GetChildren . Retorna o intervalo degenerado que representa "Exemplo de imagem incorporada".

Exemplo 2 - Um intervalo de texto que abrange parcialmente o conteúdo de um contêiner de texto. O contêiner de texto tem uma imagem incorporada que não faz parte do intervalo de texto.

{A imagem} O exemplo de imagem incorporada está inserida no texto.

Método chamado Resultado
GetText Retorna a cadeia de caracteres "The image".
GetEnclosingElement Retorna o AutomationElement mais interno que inclui o intervalo de texto; nesse caso, o AutomationElement que representa o próprio provedor de texto.
Move com parâmetros de (TextUnit.Word, 1). Move o intervalo de texto para "is ". Como somente objetos inseridos baseados em texto são considerados parte do fluxo de texto, a imagem neste exemplo não afeta Move ou seu valor retornado (1 nesse caso).

Tabela

Tabela usada para exemplos

Célula com imagem Célula com Texto
Exemplo de imagem incorporada X
Exemplo de imagem incorporada 2 S
Exemplo de imagem incorporada 3

Imagem para Z
Z

Exemplo 1 – Obter o contêiner de texto do conteúdo de uma célula.

Método chamado Resultado
GetItem com parâmetros (0,0) Retorna o AutomationElement, que representa o conteúdo da célula da tabela; nesse caso, o elemento é um controle de texto.
RangeFromChild onde AutomationElement está o objeto retornado pelo método anterior GetItem . Retorna o intervalo que abrange a imagem Exemplo de imagem incorporada.
GetEnclosingElement para o objeto retornado pelo método anterior RangeFromChild . Retorna a AutomationElement célula que representa a tabela; nesse caso, o elemento é um controle de texto que dá suporte a TableItemPattern.
GetEnclosingElement para o objeto retornado pelo método anterior GetEnclosingElement . Retorna o AutomationElement que representa a tabela.
GetEnclosingElement para o objeto retornado pelo método anterior GetEnclosingElement . Retorna o AutomationElement que representa o próprio provedor de texto.

Exemplo 2 – Obter o conteúdo do texto de uma célula.

Método chamado Resultado
GetItem com parâmetros de (1,1). Retorna o AutomationElement, que representa o conteúdo da célula da tabela; nesse caso, o elemento é um controle de texto.
RangeFromChild onde AutomationElement está o objeto retornado pelo método anterior GetItem . Retorna "Y".

Consulte também