協助工具概觀
本文概述與 Windows 應用程式協助工具情境相關的概念和技術。
協助工具與您的應用程式
人類可能存在各種殘障或缺陷情況,包括行動能力、視覺、色覺、聽力、語言、認知和識字能力方面的限制。 不過,您可以遵循本文提供的指導方針來滿足大多數人的需求。 這些指導方針包括:
- 支援鍵盤互動功能和螢幕助讀程式。
- 支援使用者自訂功能,例如字型、縮放設定 (放大)、色彩和高對比設定。
- 為部分 UI 提供替代或補充方案。
XAML 控制項內建鍵盤支援,並支援螢幕助讀程式等輔助技術。這些輔助技術採用的協助工具架構已針對 UWP 應用程式、HTML 和其他 UI 技術提供支援。 有了此內建支援,您只需設定幾個屬性,就能輕鬆自訂基本層級的協助工具。 如果您想要自行建立自訂的 XAML 元件和控制項,也可以運用自動化對等概念,為這些控制項加入類似的支援功能。
此外,您可以使用資料繫結、樣式和範本功能,輕鬆實作支援動態變更的功能,以適時顯示替代 UI 的設定和文字。
UI 自動化
協助工具支援的主要來源是對 Microsoft UI 自動化架構的整合支援。 此支援的提供途徑有兩個,一是控制項類型的基底類別以及類別實作的內建行為,二是 UI 自動化提供者 API 的介面表示法。 每個控制項類別都會使用 UI 自動化的「自動化對等」和「自動化模式」概念,向 UI 自動化用戶端回報控制項的角色和內容。 UI 自動化會將應用程式視為最上層視窗,而應用程式視窗中的所有協助工具相關內容都會透過 UI 自動化架構,提供給 UI 自動化用戶端使用。 若要深入瞭解 UI 自動化,請參閱 UI 自動化概觀。
輔助技術
使用者的協助工具需求,大多可以透過使用者安裝的輔助技術產品、或是作業系統提供的工具和設定來獲得滿足。 這些工具和設定包括螢幕助讀程式、螢幕放大功能和高對比設定等。
輔助技術產品包括各種軟體和硬體。 這類產品會透過標準鍵盤介面和協助工具架構,向螢幕助讀程式和其他輔助技術回報有關 UI 內容和結構的資訊。 輔助技術產品的例子包括:
- 螢幕小鍵盤,可讓使用者以游標代替鍵盤輸入文字。
- 語音辨識軟體,可將語音轉換為鍵盤輸入的文字。
- 螢幕助讀程式,可將文字轉換成語音或其他形式,例如點字。
- 朗讀程式,這是 Windows 內建的螢幕助讀程式。 朗讀程式具有觸控模式,可在沒有鍵盤的情況下,藉由處理觸控手勢來執行螢幕閱讀任務。
- 用於調整顯示器或顯示區域的程式或設定,例如高對比佈景主題、顯示器的每英吋點數 (dpi) 設定或放大鏡工具。
提供完善鍵盤和螢幕助讀程式支援的應用程式,通常能與各種輔助技術產品完美地搭配使用。 大部分的 UWP 應用程式都能直接與這些產品搭配使用,無需另外修改資訊或結構。 然而,您可能會想要修改某些設定,以提供最出色的協助工具體驗,或是實作其他支援功能。
您可以參考協助工具測試中列出的一些選項,了解如何使用輔助技術,針對基本的協助工具情境進行測試。
螢幕助讀程式支援和基本協助工具資訊
螢幕助讀程式會將應用程式中的文字轉譯為其他格式,例如語音或點字輸出,以協助使用者存取這些文字。 螢幕助讀程式的確切行為取決於軟體和其使用者組態。
例如,有些螢幕助讀程式會在使用者啟動或切換到正在查看的應用程式時,讀取整個應用程式的 UI,這樣使用者就能在嘗試瀏覽之前,接收到所有可用的資訊內容。 此外,在定位導覽期間,有些螢幕助讀程式還會在個別控制項獲得焦點時,讀取與該控制項相關的文字。 如此一來,使用者在導覽應用程式的各個輸入控制項時,就能清楚掌握自己目前的所在位置。 「朗讀程式」是螢幕助讀程式的一個例子,可根據使用者的選擇提供上述兩種行為。
為了幫助使用者瞭解或瀏覽應用程式,螢幕助讀程式或其他輔助技術皆需仰賴諸多資訊,其中又以應用程式元素部分的協助工具名稱最為重要。 在許多情況下,控制項或元素原本就具有協助工具名稱 (根據您另外提供的其他屬性值計算得出)。 支援內部文字顯示功能的元素,是可以使用預先計算名稱最常見的情況。 至於其他元素,您有時需要根據元素結構的最佳做法,考慮採用其他方法來提供協助工具名稱。 有時,您需要明確指定一個協助工具名稱,讓應用程式符合無障礙標準。 如需常見 UI 元素支援的預先計算值清單,以及有關一般協助工具名稱的詳細資訊,請參閱基本協助工具資訊。
此外,還有一些可用的自動化屬性 (包括下一節中說明的鍵盤屬性)。 然而,有些螢幕助讀程式僅支援部分自動化屬性。 一般來說,您應設定所有合適的自動化屬性並進行測試,以盡可能為螢幕助讀程式提供最廣泛的支援。
鍵盤支援
為了提供完善的鍵盤支援,您必須確保應用程式的每個部分都可以與鍵盤搭配使用。 如果您的應用程式主要使用標準控制項,且並未使用任何自訂控制項,那麼您已經完成了大部分工作。 基本 XAML 控制項模型提供內建鍵盤支援,包括 Tab 鍵導覽、文字輸入,以及控制項專屬支援。 用來當做版面配置容器的元素 (例如面板) 會使用版面配置順序,建立預設的定位順序。 這個順序通常就是在無障礙模式下呈現 UI 介面時,最合適的定位順序。 使用 ListBox 和 GridView 控制項來顯示資料時,這兩種控制項會提供內建的方向鍵瀏覽。 此外,Button 控制項預設提供了使用空白鍵或 Enter 鍵來啟用按鈕的功能。
如需有關鍵盤支援各個層面的詳細資訊,包括定位順序以及按鍵啟用或瀏覽功能,請參閱鍵盤協助工具。
媒體和字幕
視聽媒體通常會透過 MediaElement 物件顯示。 您可以使用 MediaElement API 來控制媒體播放。 為了方便存取,請提供可讓使用者視需要播放、暫停及停止媒體的控制項。 有時,媒體會包含一些適用於協助工具的附加元件,例如字幕或包含敘述性說明的替代音軌。
協助工具文字
就實現無障礙設計而言,文字主要有三個面向需要考量:
- 必須能讓相關工具判斷,文字是要做為定位順序周遊的一部分來讀取,還是僅做為整體文件呈現結果的一部分來讀取。 您可以透過選擇適當的元素來顯示文字,或是調整這些文字元素的屬性,來達成這項要求。 每個文字元素都有特定的用途,而每種用途通常都有對應的 UI 自動化角色。 使用錯誤的元素,可能會導致 UI 自動化收到錯誤的角色回報,並讓輔助技術使用者感到困惑。
- 不少使用者都有視力不佳的問題,因此除非文字與背景有足夠的對比,否則他們在閱讀文字時將會遇到困難。 如果應用程式設計師本身沒有視力問題,將無法直覺地理解這個問題對使用者的影響。 以色盲使用者為例,在設計中選用了不良的色彩,可能會導致某些使用者難以讀取文字。 只要遵循原本針對 Web 內容提出的協助工具建議所定義的對比標準,就能避免這些問題在應用程式中發生。 如需詳細資訊,請參閱協助工具文字的需求。
- 許多使用者難以閱讀太小的文字。 只要一開始先將應用程式 UI 中的文字設定為合理的大小,就能防止此問題發生。 然而,對於需要顯示大量文字、或是文字與其他視覺元素交錯顯示的應用程式來說,這點可能很難做到。 在這種情況下,請確保應用程式能與系統的放大顯示功能正確互動,讓應用程式中的所有文字都能隨著該功能放大。 (有些使用者將變更 dpi 值當做協助工具選項使用。此選項可從 [輕鬆存取] 中的 [放大螢幕上的內容] 存取,並會重新導向至 [控制台] UI 中的 [外觀和個人化 / ] [顯示器]。)
支援高對比佈景主題
UI 控制項會使用定義為 XAML 佈景主題資源字典一部分的視覺表示法。 當系統設定為高對比時,會特別使用當中的一或多個佈景主題。 當使用者切換至高對比時,所有 UI 控制項也會在資源字典中動態尋找適當的佈景主題,並使用適當的高對比佈景主題。 您只需確保自己並未停用這些佈景主題即可;例如,若您指定了明確的樣式,或是使用了其他樣式技術,就有可能導致高對比佈景主題無法載入,並覆寫您的樣式變更。 如需詳細資訊,請參閱高對比佈景主題。
替代 UI 設計
設計應用程式時,請考慮行動能力、視覺能力和聽力受限的使用者將如何使用它們。 輔助技術產品普遍採用標準化的 UI,因此即使您並未進行額外調整來實現無障礙環境,提供完善的鍵盤支援和螢幕助讀程式支援仍至關重要。
在許多情況下,您可以使用多種技術來傳達基本資訊,進而擴大適用對象範圍。 例如,您可以搭配使用圖示和色彩資訊來突顯重要資訊,以協助色盲使用者,或是在播放音效時同時顯示視覺效果警示,以協助聽障人士。
如有必要,您可以提供替代的無障礙 UI 元素,以完全移除不必要的元素和動畫,並提供有助於簡化使用者體驗的替代措施。 以下程式碼範例示範如何根據使用者設定,顯示一個 UserControl 執行個體來取代另一個執行個體。
XAML
<StackPanel x:Name="LayoutRoot" Background="White">
<CheckBox x:Name="ShowAccessibleUICheckBox" Click="ShowAccessibleUICheckBox_Click">
Show Accessible UI
</CheckBox>
<UserControl x:Name="ContentBlock">
<local:ContentPage/>
</UserControl>
</StackPanel>
Visual Basic
Private Sub ShowAccessibleUICheckBox_Click(ByVal sender As Object,
ByVal e As RoutedEventArgs)
If (ShowAccessibleUICheckBox.IsChecked.Value) Then
ContentBlock.Content = New AccessibleContentPage()
Else
ContentBlock.Content = New ContentPage()
End If
End Sub
C#
private void ShowAccessibleUICheckBox_Click(object sender, RoutedEventArgs e)
{
if ((sender as CheckBox).IsChecked.Value)
{
ContentBlock.Content = new AccessibleContentPage();
}
else
{
ContentBlock.Content = new ContentPage();
}
}
驗證和發佈
如需有關協助工具聲明和發佈應用程式的詳細資訊,請參閱 Store 中的協助工具。
注意
應用程式無障礙聲明僅與 Microsoft Store 有關。
自訂控制項中的輔助技術支援
建立自訂控制項時,建議您同時實作或擴充一或多個 AutomationPeer 子類別,以提供協助工具支援。 在某些情況下,只要使用基底控制項類別所使用的同一個對等類別,對衍生類別的自動化支援基本上便已足夠。 不過,您仍應對此進行測試,且根據最佳做法,仍建議您實作對等,以確保對等能夠正確回報新控制項類別的類別名稱。 實作自訂自動化對等涉及幾個步驟。 如需詳細資訊,請參閱自訂自動化對等。
支援 XAML/Microsoft DirectX 互操作性的應用程式內建輔助技術支援
預設情況下,無法存取裝載於 XAML UI 中的 Microsoft DirectX 內容 (使用 SwapChainPanel 或 SurfaceImageSource)。 XAML SwapChainPanel DirectX 互操作性範例示範如何為裝載的 DirectX 內容建立 UI 自動化對等。 此技術讓裝載的內容可透過 UI 自動化存取。
範例
提示
WinUI 3 資源庫應用程式內含大多數 WinUI 3 控制項和功能的互動式範例。 從 Microsoft Store 取得應用程式,或在 GitHub 上取得原始程式碼