共用方式為


關於文字和文字範圍控制件模式

控件的文字內容是使用 Text 控件模式來公開,此模式會將文字容器的內容表示為文字數據流。 Text 控制項模式需要 TextRange 控制項模式的支援,才能公開格式和樣式屬性。 TextRange 控制件模式支援文字控制模式,它透過在具備起始和結束端點集合的文字容器中代表連續或多個、不連續的文字範圍來達成這一點。 TextRange 控制件模式支援選取、比較、擷取和周遊等功能。

注意

文字 控件模式不提供插入或修改文字的方法。 不過,視控件而定,這可透過使用 Microsoft UI 自動化 控件模式或直接鍵盤輸入來完成。 另外還有 TextEdit 模式,可支援以程式設計方式變更文字。

 

本主題所述的功能對於輔助技術廠商及其終端用戶至關重要。 輔助技術可以使用UI自動化來收集使用者的完整文字格式資訊,並藉由 TextUnit(字元、單字、行或段落)提供以程式設計方式瀏覽和選取文字。

本主題包含下列各節:

UI 自動化 TextPattern 和文字服務架構

文字服務架構 (TSF) 是一種簡單且可調整的系統架構,可在桌面和應用程式中啟用自然語言服務和進階文字輸入。 除了為應用程式提供介面來公開其文字存放區之外,它也支援文字存放區的元數據。

TSF 是為需要將輸入注入到上下文感知場景的應用程式而設計的。 不過,文字 控件模式是一種唯讀解決方案,旨在為螢幕助讀程式和盲文裝置提供文字存放區的優化存取權。

需要對文字存儲區進行唯讀存取的可存取技術可以使用文字控制模式,但需要TSF的功能才能進行上下文感知輸入。

如需詳細資訊,請參閱 Text Services Framework

控制件類型

使用者介面自動化 編輯 控制項類型和 文件 控制項類型必須支援 文字 控制項模式。 為了改善輔助功能,Microsoft建議 工具提示 和文字控件類型也支援文字控件模式,但並非必要。

提供者介面

使用者介面自動化提供者透過實作 ITextProviderITextRangeProvider 介面,為控制項實現 文字 控制模式。 這些介面會公開控件中文字的詳細屬性資訊,並提供健全的導覽功能。

如果控件缺少任何特定屬性的支援,提供者就不需要支援所有文字屬性。

如果控件支援在文字區域內進行文字選取或放置文字游標(或系統插入符號),則提供者必須支援 ITextProvider::GetSelectionITextRangeProvider::Select 方法。 如果控件不支援這項功能,則不需要支援上述任一方法。 不過,控件必須藉由實作 ITextProvider::SupportedTextSelection 屬性,公開它支援的文字選取類型。

提供者必須一律支援 TextUnit 常數、TextUnit_CharacterTextUnit_Document,以及它能夠支援的任何其他常數。

注意

提供者可以藉由延遲至下列順序支援的下一個最大單位,略過特定 TextUnit 的支援:TextUnit_CharacterTextUnit_FormatTextUnit_WordTextUnit_LineTextUnit_ParagraphTextUnit_PageTextUnit_Document

 

用戶端介面

使用者介面自動化用戶端應用程式使用 IUIAutomationTextPatternIUIAutomationTextRange 介面來存取文字控件的文字內容。 用戶端會使用 IUIAutomationTextPattern 來選取稱為 文字範圍的文本段落,並擷取這些範圍的 IUIAutomationTextRange 介面的指標。 IUIAutomationTextRange 介面可讓用戶端操控文字範圍,並擷取範圍內文字的相關資訊,包括字型名稱、前景色彩、底線樣式等屬性。 如需詳細資訊,請參閱 文字屬性識別碼

性能

Text 控件模式主要依賴跨進程呼叫來實現其功能,因此在處理內容時不提供快取機制來提升效能。 Microsoft UI 自動化中的其他控制項模式可以使用 IUIAutomationElement::GetCachedPattern 方法來存取。

改善效能的其中一個技巧是確保UI自動化客戶端嘗試使用 IUIAutomationTextRange::GetText 方法來擷取中等大小的文字區塊。 例如,使用 GetText 擷取單一字元,將會產生每個字元的跨進程叫用,而在呼叫 GetText 時未指定最大長度,將會產生一個跨進程叫用,但可能會根據文字範圍的大小而產生高延遲。

文字模式和虛擬化內嵌物件

在可能的情況下,ITextProviderITextRangeProvider 的提供者實作應該支援檔案的整個文字,包括檢視區以外的任何文字。 針對虛擬化的螢幕外文字或內嵌物件,提供者應支援 VirtualizedItem 控件模式IVirtualizedItemProvider)。

當整個文字流仍然可用時,如果對文件進行虛擬化,ITextProvider::DocumentRange 屬性將取得包含整個文件的文字範圍。 不過,呼叫 ITextRangeProvider 方法會擷取代表檔中所有內嵌物件的虛擬化物件集合。 若要與虛擬化內嵌物件互動,客戶端必須呼叫 IVirtualizedItemProvider::Realize 方法,這樣項目才能完全作為 UI 自動化元素。 客戶端必須遵循類似的程式,才能在內嵌數據表中使用網格線元素,其中數據表的一部分是螢幕外和虛擬化的。

搭配文字控制項模式使用自訂控件類型

雖然 Text 控制項模式支援許多文字屬性和內嵌物件,但無法事先定義所有可能的檔元素和簡報類型。 對於現有屬性或標準控件類型不支援的檔元素,提供者可以使用使用者介面自動化所提供的擴充性功能 自定義 控件類型。

對於以頁面簡報為基礎的應用程式和使用者介面,「頁面」的界限和版面配置呈現也可以表示為具有自定義控件類型的內嵌物件(亦即,LocalizedControlType="page")。 如此一來,內嵌物件就可以裝載其他無法輕易成為檔文字數據流一部分的頁面元素,例如每個頁面的頁首和頁尾字段,做為“page” 內嵌物件的子系。 或者,每個「頁面」物件都可以獨立支援 文字 控件模式,這適用於幻燈片放映簡報的製作工具或頁面型桌面發佈環境等應用程式。

文字範圍的生命週期

可能的話,提供者應該確保任何文字變更,例如刪除、插入和移動,會反映在相關聯的文字範圍中。 如果無法更新文字範圍,提供者應該引發 UIA_Text_TextChangedEventId 事件,以通知用戶端文字範圍不再有效,而且必須擷取新的範圍。

概念

UI 自動化如何支援內嵌物件

UI 自動化控制項模式概觀

文字內容的 UI 自動化支援

使用文字型控件

其他資源

文字服務架構