公開基本的無障礙資訊
基本的無障礙資訊通常分為以下類別:名稱、角色和值。 本主題說明幫助您的應用程式公開輔助技術所需基本資訊的程式碼。
協助工具名稱
「協助工具名稱」是一個簡短的描述性文字字串,可供螢幕助讀程式用於宣告 UI 元素。 具有對了解內容,或與 UI 互動而言重要之意義的 UI 元素,應設定協助工具名稱。 這類元素通常包括影像、輸入欄位、按鈕、控制項和區域。
下表說明如何定義或取得 XAML UI 中各種元素類型的協助工具名稱。
項目類型 | 描述 |
---|---|
靜態文字 | 系統會自動根據可見 (內部) 文字,決定 TextBlock 和 RichTextBlock 元素的協助工具名稱。 元素內的所有文字都會當做名稱使用。 請參閱根據內部文字決定的名稱。 |
影像 | XAML Image 元素 與 img 和類似元素的 HTML alt 屬性之間沒有直接的對應關係。 請使用 AutomationProperties.Name 來提供名稱,或是使用輔助字幕技術。 請參閱影像的協助工具名稱。 |
表單元素 | 表單元素的協助工具名稱應與該元素顯示的標籤相同。 請參閱標籤和 LabeledBy。 |
按鈕和連結 | 預設情況下,按鈕或連結的協助工具名稱是以可見文字為基礎,並遵循根據內部文字決定的名稱所述的相同規則。 如果按鈕僅包含影像,請使用 AutomationProperties.Name 提供符合按鈕預期動作的純文字等效內容。 |
大部分的容器元素 (例如面板) 不會將其內容升級為協助工具名稱。 這是因為應回報名稱和對應角色的是項目內容,而不是其容器。 容器元素可能會回報,自己在 Microsoft UI 自動化表示法中擁有子元素,因此可以讓輔助技術邏輯周遊。 然而,輔助技術使用者通常不需要知道容器,因此大部分的容器都沒有命名。
角色和值
屬於 XAML 詞彙一部分的控制項和其他 UI 元素會實作 UI 自動化支援,以連同其定義一併回報其角色和值。 您可以使用 UI 自動化工具來檢查控制項的角色和值訊息,也可以閱讀每個控制項的 AutomationPeer 實作文件。 UI 自動化架構中的可用角色定義於 AutomationControlType 列舉中。 UI 自動化用戶端 (例如輔助技術) 可以藉由呼叫 UI 自動化架構使用控制項的 AutomationPeer 公開的方法,來取得角色資訊。
並非所有控制項都有值。 擁有值的控制項會透過自身支援的對等和模式,將此資訊回報給 UI 自動化。 例如,TextBox 表單元素確實含有值。 輔助技術可以成為 UI 自動化用戶端,並能同時探索值是否存在、以及該值為何。 在這種特定情況下,TextBox 會透過 TextBoxAutomationPeer 定義支援IValueProvider 模式。
注意
如果您使用 AutomationProperties.Name 或其他技術明確提供協助工具名稱,請勿在協助工具名稱中包含與控制項角色或類型資訊相同的文字。 例如,名稱中請勿包含「button」或「list」等字串。 角色和類型資訊來自不同的 UI 自動化屬性 (LocalizedControlType),該屬性由 UI 自動化的預設控制項支援提供。 許多輔助技術會將 LocalizedControlType 加入協助工具名稱中,因此在協助工具名稱中重複加入角色,可能會導致不必要的重複字詞。 例如,如果您以「button」做為 Button 控制項的協助工具名稱,或將「button」作為名稱的最後一部分,則螢幕助讀程式可能會將此內容讀為「button button」。 您應該使用朗讀程式,測試這方面的協助工具資訊。
影響 UI 自動化樹狀結構檢視
UI 自動化架構採用樹狀結構檢視的概念,其中 UI 自動化用戶端可以使用三種可能的檢視 (原始、控制項和內容),擷取 UI 中元素之間的關係。 控制項檢視是 UI 自動化用戶端經常使用的檢視,因為它能很好地呈現並組織 UI 中的互動式元素。 測試工具通常會在呈現元素組織時,讓您選擇要使用的樹狀結構檢視。
預設情況下,當 UI 自動化架構代表 Windows 應用程式的 UI 時,任何 Control 衍生類別和一些其他元素都會顯示在控制項檢視中。 但有時,由於 UI 組合的原因,您不希望某個元素出現在控制項檢視中,因為該元素會重複資訊、或呈現對協助工具場景不重要的資訊。 請使用附加屬性 AutomationProperties.AccessibilityView,變更元素公開至樹狀結構檢視的方式。 如果您將元素放在 Raw 樹狀結構中,大部分的輔助技術都不會將該元素回報為其檢視的一部分。 若要查看現有控制項的一些運作範例,請在文字編輯器中開啟 generic.xaml 設計參考 XAML 檔案,然後在範本中搜尋 AutomationProperties.AccessibilityView。
根據內部文字決定的名稱
為了方便使用可見 UI 中已存在的字串做為協助工具名稱值,許多控制項和其他 UI 元素都支援根據元素內部文字或內容屬性的字串值,自動決定預設的協助工具名稱。
- TextBlock、RichTextBlock、TextBox 和 RichTextBlock 都會將 Text 屬性的值升階為預設的協助工具名稱。
- 任何 ContentControl 子類別都會使用迭代「ToString」技術來尋找其 Content 值中的字串,並將這些字串升階為預設的協助工具名稱。
注意
根據 UI 自動化的強制規定,協助工具名稱長度不能超過 2048 個字元。 如果用於自動判斷協助工具名稱的字串超出該限制,就會在該時間點截斷協助工具名稱。
影像的協助工具名稱
為了支援螢幕助讀程式、並為 UI 中的每個元素提供基本識別資訊,您有時必須為影像和圖表等非文字訊息 (不包括任何純粹的裝飾或結構元素) 提供替代文字。 這些元素沒有內部文字,因此協助工具名稱不會有預先計算的值。 您可以透過設定 AutomationProperties.Name 附加屬性來直接設定協助工具名稱,如本範例所示。
XAML
<!-- Comment -->
<Image Source="product.png"
AutomationProperties.Name="An image of a customer using the product."/>
或者,您也可以考慮在可見 UI 中加入文字標題,並以其做為影像內容之標籤相關協助工具資訊。 以下是範例:
XAML
<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
Source="snoqualmie-NF.jpg"
AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>
標籤和 LabeledBy
將標籤與表單元素關聯的首選方法,是使用帶有 x:Name 標籤文字的 TextBlock,然後設定表單元素上的 AutomationProperties.LabeledBy 附加屬性,以依其 XAML 名稱引用標籤 TextBlock。 如果您使用此模式,輔助技術便可以使用標籤文字作為表單欄位的協助工具名稱。 以下範例示範如何運用此技巧。
XAML
<StackPanel x:Name="LayoutRoot" Background="White">
<StackPanel Orientation="Horizontal">
<TextBlock Name="lbl_FirstName">First name</TextBlock>
<TextBox
AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
Name="tbFirstName" Width="100"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Name="lbl_LastName">Last name</TextBlock>
<TextBox
AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
Name="tbLastName" Width="100"/>
</StackPanel>
</StackPanel>
協助工具描述 (選擇性)
協助工具描述提供了有關特定 UI 元素的附加協助工具資訊。 如果協助工具名稱本身無法充分傳達元素的用途,通常就需要提供協助工具描述。
只有當使用者按下 CapsLock+F 請求有關元素的更多資訊時,「朗讀程式」螢幕助讀程式才會讀取元素的協助工具描述。
協助工具名稱是用來識別控制項,而不是完整記錄其行為。 如果簡短的描述仍不足以解釋該控制項,除了 AutomationProperties.Name 之外,您還可以設定 AutomationProperties.HelpText 附加屬性。
儘早並經常測試協助工具
最終,支援螢幕助讀程式的最佳方法,是親自使用螢幕助讀程式測試您的應用程式。 這將會向您呈現螢幕助讀程式的行為,以及應用程式可能缺少的基本協助工具資訊。 接著,您可以據以調整 UI 或 UI 自動化屬性值。 如需詳細資訊,請參閱協助工具測試。
AccScope 是其中一項可用於測試協助工具的工具。 AccScope 工具特別有用,因為您可以看到 UI 的視覺呈現結果,藉此得知輔助技術如何將您的應用程式視為自動化樹狀結構。 特別是,它提供的朗讀程式模式可讓您了解朗讀程式如何從您的應用程式中取得文字,以及它如何組織 UI 中的元素。 AccScope 的設計使其可以在應用程式的整個開發週期中使用並發揮作用,甚至在初步設計階段也是如此。 如需詳細資訊,請參閱 AccScope。
來自動態資料的協助工具名稱
Windows 支援許多控制項,這些控制項可用來透過稱為資料繫結的功能,顯示來自關聯資料來源的值。 將資料項目填入清單時,您可能需要使用一種技巧,在填入初始清單之後,設定資料繫結清單項目的協助工具名稱。 如需詳細資訊,請參閱 XAML 輔助使用範例中的「案例 4」。
協助工具名稱和當地語系化
為了確保協助工具名稱也是當地語系化的元素,您應該使用正確的技術,將可當地語系化字串儲存為資源,然後使用 x:Uid directive 值來引用資源連接。 如果協助工具名稱來自明確設定的 AutomationProperties.Name 用法,請確保當中的字串也可當地語系化。
請注意,AutomationProperties 等附加屬性會對資源名稱使用特殊的限定語法,以便資源引用套用於特定元素的附加屬性。 例如,套用於名為 MediumButton
之 UI 元素的 AutomationProperties.Name 資源名稱為:MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name
。