分享方式:


TextPattern 和 Embedded 物件概觀

注意

本文件適用對象為 .NET Framework 開發人員,其想要使用 System.Windows.Automation 命名空間中定義的受控 UI 自動化類別。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:UI 自動化

本概觀描述 Microsoft UI 自動化如何在文字文件或容器內公開內嵌物件或子元素。

在 UI 自動化中,內嵌物件是任何具有非文字界限的元素;例如,影像、超連結、表格或文件類型 (如 Microsoft Excel 試算表或 Microsoft Windows Media 檔案)。 這不同於下列標準定義:元素建立於一個應用程式中,並內嵌或連結在另一個應用程式中。 物件是否可以在其原始應用程式中進行編輯與 UI 自動化的內容無關。

內嵌物件和 UI 自動化樹狀目錄

內嵌物件會被視為 UI 自動化樹狀結構的控制項檢視內的個別元素元素。 這些元素會公開成為文字容器的子系,以便透過與 UI 自動化中其他控制項相同的模式進行存取。

影像位於文字容器中的內嵌式資料表 表格、影像和超連結內嵌物件的文字容器範例

前述範例的內容檢視 上述文字容器之一部分的內容檢視範例

使用 TextPattern 和 TextPatternRange 公開內嵌物件

TextPattern 控制項模式類別和 TextPatternRange 類別搭配使用,可公開方法和屬性,以便瀏覽和查詢內嵌物件。

在 UI 自動化樹狀結構的控制項檢視和內容檢視 (例如超連結或表格儲存格) 中,文字容器和內嵌物件的文字內容 (或內部文字) 會公開為單一連續的文字資料流; 物件界限會被忽略。 如果使用者介面自動化用戶端為了以某種方式進行敘述、解譯或分析而擷取文字,則應檢查特殊案例 (例如具有文字內容或其他內嵌物件的表格) 的文字範圍。 呼叫 GetChildren 以取得每個內嵌物件的 AutomationElement ,然後呼叫 RangeFromChild 以取得每個元素的文字範圍,即可達成。 這會以遞迴方式進行,直到擷取所有的文字內容為止。

内嵌物件所跨越的文字範圍。 具有內嵌物件及其範圍的文字資料流範例

如需周遊文字範圍的內容,則應在幕後執行一連串的步驟,才能成功執行 Move 方法。

  1. 文字範圍已正規化;也就是,文字範圍已在 Start 端點摺疊為變質範圍,以致 End 端點變成多餘的。 在文字範圍跨越 TextUnit 界限的情況下,這是消除語意模糊的必要步驟:例如,{The URL https://www.microsoft.com is embedded in text,其中 "{" 和 "}" 是文字範圍端點。

  2. 結果產生的範圍會在 DocumentRange 中向後移至所要求 TextUnit 界限的開頭。

  3. 範圍會在 DocumentRange 中依所要求的 TextUnit 界限數目向前或向後移動。

  4. 範圍會接著依一個要求的 End 界限移動 TextUnit 端點,從變質範圍狀態展開。

由 Move 及 ExpandToEnclosingUnit 進行的範圍調整 如何針對 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 傳回字串 "The URL"。
GetEnclosingElement 傳回圍住文字範圍的最內層 AutomationElement ;在此情況下是代表文字提供者本身的 AutomationElement
Move ,參數為 (TextUnit.Word, 1)。 將文字範圍移至 "http",因為超連結文字是由個別字詞所組成。 在此情況下,並未將超連結視為單一物件。

URL {http} 內嵌於文字中。

映像

範例 1 - 包含內嵌影像的文字範圍

{影像 內嵌影像範例 內嵌在文字中}。

呼叫的方法 結果
GetText 傳回字串 "The is embedded in text"。 任何與影像相關聯的 ALT 文字不應該包含在文字資料流中。
GetEnclosingElement 傳回圍住文字範圍的最內層 AutomationElement ;在此情況下是代表文字提供者本身的 AutomationElement
GetChildren 傳回表示影像控制項的 AutomationElement
RangeFromChild ,其中 AutomationElement 是先前 GetChildren 方法傳回的物件。 傳回表示 "內嵌影像範例" 的變質範圍。

範例 2 - 部分跨越文字容器內容的文字範圍。 此文字容器有不屬於此文字範圍的內嵌影像。

{影像} 內嵌影像範例 內嵌在文字中。

呼叫的方法 結果
GetText 傳回字串 "The image"。
GetEnclosingElement 傳回圍住文字範圍的最內層 AutomationElement ;在此情況下是代表文字提供者本身的 AutomationElement
Move ,參數為 (TextUnit.Word, 1)。 將文字範圍移至 "is"。 因為只有以文字為基礎的內嵌物件會被視為文字資料流的一部分,所以此範例中的影像不會影響 Move 或其傳回值 (在本例中為 1)。

Table

範例使用的資料表

包含影像的儲存格 包含文字的儲存格
內嵌影像範例 X
內嵌影像範例 2 Y
內嵌影像範例 3

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"。

另請參閱