次の方法で共有


TextPattern オブジェクトと埋め込みオブジェクトの概要

このドキュメントは、System.Windows.Automation 名前空間で定義されているマネージド UI オートメーション クラスを使用する .NET Framework 開発者を対象としています。 UI オートメーションの最新情報については、「Windows Automation API: UI オートメーション 」を参照してください。

この概要では、Microsoft UI オートメーションがテキスト ドキュメントまたはコンテナー内で埋め込みオブジェクトまたは子要素を公開する方法について説明します。

UI オートメーションでは、埋め込みオブジェクトはテキスト以外の境界を持つ任意の要素です。たとえば、Microsoft Excel スプレッドシートや Microsoft Windows Media ファイルなどの画像、ハイパーリンク、テーブル、ドキュメントの種類などです。 これは、あるアプリケーションで要素が作成され、別のアプリケーション内に埋め込まれたり、リンクされたりする標準定義とは異なります。 オブジェクトを元のアプリケーション内で編集できるかどうかは、UI オートメーションのコンテキストでは関係ありません。

埋め込みオブジェクトと UI オートメーション ツリー

埋め込みオブジェクトは、UI オートメーション ツリーのコントロール ビュー内で個々の要素として扱われます。 これらは、UI オートメーションの他のコントロールと同じモデルを介してアクセスできるように、テキスト コンテナーの子として公開されます。

テキスト コンテナー内の画像を含む埋め込みテーブル テーブル、イメージ、およびハイパーリンク埋め込みオブジェクトを含むテキスト コンテナーの例

前の例のUIA_TextPattern_Embedded_Objects_Overview_Example2のコンテンツ ビュー 前のテキスト コンテナーの一部のコンテンツ ビューの例

TextPattern と TextPatternRange を使用して埋め込みオブジェクトを公開する

組み合わせて使用すると、 TextPattern コントロール パターン クラスと TextPatternRange クラスは、埋め込みオブジェクトのナビゲーションとクエリを容易にするメソッドとプロパティを公開します。

テキスト コンテナーのテキスト コンテンツ (または内部テキスト) と、ハイパーリンクやテーブル セルなどの埋め込みオブジェクトは、コントロール ビューと UI オートメーション ツリーのコンテンツ ビューの両方で、単一の連続テキスト ストリームとして公開されます。オブジェクトの境界は無視されます。 UI オートメーション クライアントが、何らかの方法で暗唱、解釈、または分析を目的としてテキストを取得する場合は、テキスト コンテンツや他の埋め込みオブジェクトを含むテーブルなど、特殊なケースに対してテキスト範囲をチェックする必要があります。 これを実現するには、 GetChildren を呼び出して各埋め込みオブジェクトの AutomationElement を取得し、 RangeFromChild を呼び出して各要素のテキスト範囲を取得します。 これは、すべてのテキスト コンテンツが取得されるまで再帰的に行われます。

埋め込みオブジェクトによってスパンされるテキスト範囲。 埋め込みオブジェクトとその範囲スパンを含むテキスト ストリームの例

テキスト範囲のコンテンツを走査する必要がある場合、 Move メソッドが正常に実行されるように、一連の手順がバックグラウンドで行われます。

  1. テキスト範囲は正規化されます。つまり、テキスト範囲は、 Start エンドポイントで縮小された範囲に折りたたまれるため、 End エンドポイントは余分になります。 この手順は、テキスト範囲が TextUnit 境界にまたがる状況であいまいさを解消するために必要です。たとえば、"{" と "}" がテキスト範囲のエンドポイントである {The URL https://www.microsoft.com is embedded in text などです。

  2. 結果の範囲は、要求されたTextUnit境界の先頭にDocumentRangeの後方に移動します。

  3. 範囲は、要求された数のTextUnit境界によってDocumentRange内で前方または後方に移動されます。

  4. その後、要求された 1 つのTextUnit境界によってEnd エンドポイントを移動することで、範囲が縮退した範囲の状態から拡張されます。

Move および ExpandToEnclosingUnit UIA_TextPattern_MoveAndExpand_Examplesによる範囲調整 Move() と ExpandToEnclosingUnit() に対してテキスト範囲を調整する方法の例

一般的なシナリオ

次のセクションでは、埋め込みオブジェクトを含む最も一般的なシナリオの例を示します。

次に示す例の凡例:

{ = Start

} = End

例 1 - 埋め込みテキスト ハイパーリンクを含むテキスト範囲

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

呼び出されたメソッド 結果
GetText string 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 テキスト範囲が URL 文字列全体にまたがるわけではないため、 null を返します。

例 3 - テキスト コンテナーの内容を部分的にまたがるテキスト範囲。 テキスト コンテナーには、テキスト範囲に含まれていない埋め込みテキスト ハイパーリンクがあります。

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

呼び出されたメソッド 結果
GetText 文字列 "The URL" を返します。
GetEnclosingElement テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement
Move (TextUnit.Word,1) のパラメーターを指定します。 ハイパーリンクのテキストは個々の単語で構成されるため、テキスト範囲のスパンを "http" に移動します。 この場合、ハイパーリンクは 1 つのオブジェクトとして扱われません。

URL {[http]} はテキストに埋め込まれています。

画像

例 1 - 埋め込み画像を含むテキスト範囲

{画像 埋め込みイメージ はテキストに埋め込まれています}。

呼び出されたメソッド 結果
GetText 文字列 "The is embedded in text" を返します。 画像に関連付けられている Alt テキストは、テキスト ストリームに含まれるとは思えません。
GetEnclosingElement テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement
GetChildren イメージ コントロールを表す AutomationElement を返します。
RangeFromChild ここで AutomationElement は、前の GetChildren メソッドによって返されるオブジェクトです。 "Embedded Image Example" を表す縮退範囲を返します。

例 2 - テキスト コンテナーの内容を部分的にまたがるテキスト範囲。 テキスト コンテナーには、テキスト範囲に含まれていない埋め込みイメージがあります。

{The image}埋め込み画像の例は、テキストに埋め込まれています。

呼び出されたメソッド 結果
GetText 文字列 "The image" を返します。
GetEnclosingElement テキスト範囲を囲む最も内側の AutomationElement を返します。この場合は、テキスト プロバイダー自体を表す AutomationElement
Move (TextUnit.Word,1) のパラメーターを指定します。 テキスト範囲のスパンを "is" に移動します。 テキスト ベースの埋め込みオブジェクトのみがテキスト ストリームの一部と見なされるため、この例の画像は Move またはその戻り値 (この場合は 1) には影響しません。

例に使用されるテーブル

画像付きセル テキストを含むセル
埋め込みイメージの例 X
埋め込み画像の例 2 Y
埋め込み画像の例 3

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" を返します。

こちらも参照ください